- ベストアンサー
foreach文の中での条件分岐
ハンドルネームのとうり、php初級者です。 素朴な質問をさせてください。 変数"$test"があります。これをあるwebページにて、指定した要素が存在する数だけ回して表示しています。 <? $testlist = getTestList(); foreach ($testlist as $test) { ?> <a name="<?= date_format("Ymd",$test["テスト日付"]) ?>"></a> <table> <tr> <div>【 <?= hs($test["テスト題名"]) ?> 】</div> </tr> <tr> <div align="left"><?= disp($test["テスト本文"]) ?></div><br /> </tr> </table> <? } ?> これをdate_format("Ymd",$test["テスト日付"])の月(Ym)が同じものだけを表示したいのですが、方法がわかりません。 (希望する動きの例) 下記3つのデータがあるとします。 ~データ1~ テスト日付:20070504 テスト題名:テスト1 テスト本文:テスト本文1 ~データ2~ テスト日付:20070321 テスト題名:テスト2 テスト本文:テスト本文2 ~データ3~ テスト日付:20070517 テスト題名:テスト3 テスト本文:テスト本文3 ※date_format("Ymd",$test["テスト日付"])が20070504だった時 テスト日付:20070504 テスト題名:テスト1 テスト本文:テスト本文1 テスト日付:20070517 テスト題名:テスト3 テスト本文:テスト本文3 ※date_format("Ymd",$test["テスト日付"])が20070321だった時 テスト日付:20070321 テスト題名:テスト2 テスト本文:テスト本文2 こんな感じです。 どなたかお分かりになられましたらご教授ください。お願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでしょうか? <?php $list = array(); $list[] = array('テスト日付' => 20070524, 'テスト題名' => 'テスト1', 'テスト本文' => 'テスト本文1'); $list[] = array('テスト日付' => 20070321, 'テスト題名' => 'テスト2', 'テスト本文' => 'テスト本文2'); $list[] = array('テスト日付' => 20070517, 'テスト題名' => 'テスト3', 'テスト本文' => 'テスト本文3'); $targetDate = '20070504'; $listNew = array(); foreach ($list as $key => $data) { $date = $data['テスト日付']; if (substr($date, 0, 6) == substr($targetDate, 0, 6)) { $listNew[$date . sprintf('_%04d', $key)] = $data; } } ksort($listNew); unset($list); echo '<pre>'; print_r($listNew);
その他の回答 (3)
- petisuke
- ベストアンサー率0% (0/2)
こういう意味でしょうか。 <?php function pickData($testlist,$key){ $ret=array(); foreach($testlist as $val){ if(substr($val, 0, 6)==$key) $ret[]=$val; } return $ret; } $testlist[]=20070401; $testlist[]=20070502; $testlist[]=20070503; $testlist[]=20070604; $int=pickData($testlist,200705); print_r($int); ?>
- swqamy
- ベストアンサー率37% (11/29)
日付の左から6桁を取得して、テスト日付の6桁と比較して みたらどうですか? 「mb_substr」で取得して・・・ 必要であれば「mb_strlen」で桁数も習得できますし。
補足
アドバイスありがとうございます。 比較する場所なのですが、 <? $viewmonth = date_format("Ymd",$test["日付"]); $month = mb_substr("$viewmonth", -4, 2); ?> といった処理を行い、 <? if (!strcmp($month1, $month2)) { ?> で比較をすることになると思うのですが どこで(foreach分の中でしょうか?)比較をしたら良いのかわかりません。 すみませんがよろしくお願いいたします。
- tany180sx
- ベストアンサー率63% (239/379)
年月でグルーピングしたいという意味でしょうか? それとも指定した年月のデータだけ取り出したいのでしょうか?
補足
補足要求ありがとうございます。 年月のデータだけ取り出したいです。 未だに自分では解決できていません。 もし有効な方法がございましたらよろしくお願いいたします。
補足
私の質問の仕方が悪かった事を大変深くお詫び申し上げます。 変数$testの値は、このページに遷移する前のページからtestidとして値を渡されており、このページ内の最上部にて <? $test= gettestById($_REQUEST["testid"]); ?> として取得しております。 <? $testlist = getTestList(); foreach ($testlist as $test) { ?> で受け渡された$testを無視してforeachしているのは、 遷移前のページから受け渡された$testの$test["日付"]が含まれる月のデータのみを全て表示させたいからです。