好きなおでんの具材ドラフト会議しましょう

ハンドルネームのとうり、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

こんな感じです。
どなたかお分かりになられましたらご教授ください。お願いいたします。

A 回答 (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);
    • good
    • 0

こういう意味でしょうか。


<?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);
?>

この回答への補足

私の質問の仕方が悪かった事を大変深くお詫び申し上げます。
変数$testの値は、このページに遷移する前のページからtestidとして値を渡されており、このページ内の最上部にて
<?
$test= gettestById($_REQUEST["testid"]);
?>
として取得しております。

<?
$testlist = getTestList();
foreach ($testlist as $test) {
?>
で受け渡された$testを無視してforeachしているのは、
遷移前のページから受け渡された$testの$test["日付"]が含まれる月のデータのみを全て表示させたいからです。

補足日時:2007/05/26 13:28
    • good
    • 0

日付の左から6桁を取得して、テスト日付の6桁と比較して


みたらどうですか?
「mb_substr」で取得して・・・
必要であれば「mb_strlen」で桁数も習得できますし。

参考URL:http://bg.pi-ppi.com/page/g01/000107.html,http:/ …

この回答への補足

アドバイスありがとうございます。
比較する場所なのですが、
<? $viewmonth = date_format("Ymd",$test["日付"]);
$month = mb_substr("$viewmonth", -4, 2); ?>
といった処理を行い、
<? if (!strcmp($month1, $month2)) { ?>
で比較をすることになると思うのですが
どこで(foreach分の中でしょうか?)比較をしたら良いのかわかりません。

すみませんがよろしくお願いいたします。

補足日時:2007/05/26 13:05
    • good
    • 0

年月でグルーピングしたいという意味でしょうか?


それとも指定した年月のデータだけ取り出したいのでしょうか?

この回答への補足

補足要求ありがとうございます。
年月のデータだけ取り出したいです。

未だに自分では解決できていません。
もし有効な方法がございましたらよろしくお願いいたします。

補足日時:2007/05/24 11:24
    • good
    • 0

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


おすすめ情報