アプリ版:「スタンプのみでお礼する」機能のリリースについて

初めまして、PHP初心者です。whileについての質問です

whileでループ中に指定する数ごとに区切りつけたいと思っています。最初は5回目、残りは6回毎に区切る方法はありますか?


$food_image[] = a:
$food_image[] = b:
$food_image[] = c:
$food_image[] = d:
$food_image[] = e:
$food_image[] = f:
$food_image[] = g:

...配列は50個くらいまで続きます…

$food_count = count($food_image);

$i = 1;
while( $i <= $food_count ){
$pdf->Text($x, $y, sjis_conv("$food_image[$i] "));
$i++;
}


どうぞよろしくお願いします

A 回答 (4件)

配列を整理するというと一度次のような2次元配列に変換してしまう方法もあります。


そこから2重ループで好きに処理すれば良いわけです。

$result = array(
 array(a,b,c,d,e),  // 5件
 array(f,g,h,i,j,k), // 6件
 array(l,n,m,o,p,q), // 6件
 …
);


<?php
$data = array();
for($i=1; $i<=50; $i++) {
$data[] = "ダミーデータ{$i}";
}

$top5 = array_splice($data, 0, 5); // 先頭5件を切り出す

$result = array_chunk($data, 6); // 残りを6件ずつに分割(2次元配列)

array_unshift($result, $top5); // 先頭に挿入

print_r($result);


>PHP初歩のときは配列の扱いをしっかりやることと
>教えてもらいました

上記のように配列関数(array_*)に慣れると便利です。
    • good
    • 1

今回の件は$food_imageのキーが0から始まる整数であることが


自明ですが、配列の場合必ずしもそうであるわけではありません。
whileでカウンタをインクリメントする場合は、条件を合わせるために
array_keys()やarray_values()で一度配列を整理した方がよいでしょう。

すでに回答はでているとおりforeachでやるのが賢明だという
前提で、もしwhileでやるならこんな感じ

<?
$food_image= Array("a"=>"x","b"=>"y","c"=>"z");
$food_values = array_values($food_image);
$i = 0;
while( true ){
if(isset($food_values[$i])===false) break;
print $food_values[$i];
$i++;
}
?>
    • good
    • 0
この回答へのお礼

どうもありがとうございます

PHP初歩のときは配列の扱いをしっかりやることと
教えてもらいました、

配列を整理するということが大事なんですね。

お礼日時:2010/02/06 02:57

#1です。



> whileでできると思って、3日くらい思案しておりましたが

while でも出来る事はできるのですが、今回の場合は、配列に入っているものでしたし、foreachのほうがいいかな~。ってだけでした。
    • good
    • 0
この回答へのお礼

教えていただいて、ネットでforeachについて調べていたら
配列を扱うときはforeachでの処理が一般的だと知りました。

何分、初心者なもので、そこら辺をしっかり勉強したいと思います。

お礼日時:2010/02/04 04:02

んーー、とりあえず、while である必要はないと思われるのですが、


while のほうがお好みですか?

実行してないので どこかで軽くエラーとか出るかもしれませんが、以下のような感じでいかがでしょうか?

$limit = 5;
foreach($food_image as $i => $dat) {
$limit--;
$pdf->Text($x, $y, sjis_conv("$dat"));
if ($limit == 0) {
// ここに区切りを入れる処理を書いてください。
$limit = 6;
}
}
    • good
    • 1
この回答へのお礼

bm_hiro様

早速のご回答ありがとうございます。

試したところ、解決できました。
助かりました。

whileでできると思って、3日くらい思案しておりましたが
そもそもが間違いだったのですね。。

お礼日時:2010/02/04 02:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!