テキストファイルにあるシリアライズされた複数の多次元配列データを日付順にソートした後に10レコードずつ表示する方法について
PHPプログラミング初心者のAJYAMAと申します。
表題にあるようなことが、したいのですが、以下のコードでできなくて困っています。どなたか、良きアドバイスをいただけないでしょうか?
<POSTされた値のテキストファイルへの書き込み>
$lines=array($recordID,$nickname,$date,$area,$num,$item,$size);
//データをシリアル化
$serializedLines=serialize($lines);
//テキストファイルに改行を入れ、一行にデータを収納する
$serializedLines=$serializedLines."\n";
//txtファイルに書き込み
$fp=fopen("report.txt","a");
flock($fp, LOCK_EX);
fputs($fp,$serializedLines);
fclose($fp);
/*
<データ(変数)の値>
テキストファイルにシリアル化して格納されたデータの状態
array(0 =>
$recordID 例)array(1)
$nickname 例)array(Ajyama)
$date 例)array(2008/8/30,2008/9/3,2008/9/4)
$area 例)array(東京,大阪,名古屋)
$num 例)array(01,02,03)
$item 例)array(りんご,バナナ,メロン)
$size 例)array(大,中,小)
)
*/
<テキストファイルからデータを読み込み、HTMLへの展開>
<?php
//ファイルを開く
$handle=fopen(dirname(__FILE__)."/../mod/report.txt","r");
//データを呼び出す
while(($serialrow=fgets($handle,1024))!==FALSE){
//シリアライズを解除して変数に格納
$row=unserialize($serialrow);
//展開したデータを配列に格納(ソートするため)
$data[]=array($recordID,$nickname,$date,$area,$num,$item,$size)
}
fclose($handle);
//変数の展開
foreach($data as $key=>$row){
//ソート
array_multisort($d,SORT_DESC,SORT_NUMERIC,$num,SORT_DESC,SORT_NUMERIC,$data);
//レコード数毎にページを制御
$Cid=$_GET['cid'];
$Size=sizeof($data);
$P=$_GET["p"];
if($P>0){
$Prev=$P-1;
$PrevPage="<a href=".$_SERVER['PHP_SELF']."?p={$Prev}&&cid={$Cid}>前の10件</a>";
}
if($Size/10-1>$P){
$Next=$P+1;
$NextPage="<a href=".$_SERVER['PHP_SELF']."?p={$Next}&&cid={$Cid}>次の10件</a>";
}
if($P==0&&$Size/10<=1){
$NextPage="";
}
?>
<h2><?php echo $CatTitle?></h2><BR>
全 <?=$Size?>件 | <?=$PrevPage?> <?=$NextPage?> <?=$NumP?>
//配列変数の展開
<?php
for($i=$P*10;$i<$P*10+10;$i++){
for($j=0;$j<$no;$j++){
echo <<<EOF
<table >
<tr>
<td>{$recordID[$i]}</td>
<td>{$nickname[$i]}</td>
<td>{$date[$i][$j]} {$area[$i][$j]} {$num[$i][$j] {$item[$i][$j]} {size[$i][$j]}</td>
</tr>
</table>
EOF;
}
}
?>
お礼
質問をほったらかしにしてしまい申し訳ございません。ありがとうございました。また何かございましたら宜しくお願い致します。
補足
ご返信ありがとうございます。 print 以降の部分にテーブルを使っている場合、例えば、以下のような場合ではいかがでしょうか? <?php $Name=array("Aさん","Bさん","Cさん","Dさん","Eさん","Fさん"・・・この後1000件続く); $Count=array(123,198,123,117,123,202・・・この後1000件続く); array_multisort($Count,SORT_DESC,SORT_NUMERIC,$Name,SORT_DESC,SORT_STRING); $rank=1; for($i=0;$i<count($Name);$i++){ print("<table border='0' cellspacing='1' cellpadding='0' width='270' bgcolor='#999999'><tr bgcolor='#FFFFFF'><td id='key1' width='40'>第".$rank."位</td><td id='key1'>".$Name[$i]."</td><td id='key1' width='30'>".$Count[$i]."</td></tr></table>"); if($Count[$i] != $Count[$i+1]){ $rank=$i+2; } } ?> 以上のスクリプト文の場合も、ob_flush(); と flush(); を同じところに入れればOKでしょうか?一度試してみたのですが、徐々に(段階的に)表示されず、何秒後かに一挙に表示されてしまします。お手数お掛けしますがよろしくお願い致します。