• 締切済み

テキストファイルにあるシリアライズされた複数の多次元配列データを日付順にソートした後に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; } } ?>

みんなの回答

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

こういう手合いのものは まず分解して動作確認したら良いよ テストデータを用意して単体で動作を確認するって話ね。 シリアライズ・デシリアライズ・HTML出力 と個々にやると どこが変なのか判るんじゃない? いっぺんにやろうとすると途方に暮れちゃうだけじゃないかな

Ajyama
質問者

補足

おっしゃられるように分解してテストを行って、デシリアライズまでの成功は確認できているのですが、それ以降がどうしてもできないので、根本的に書き方が間違っているのではないかと考えています。 このデシリアライズされたレコードの形態は、array(array(),array(),・・・)という形式のものが複数ある状態になっていて、これをソートする事とHTMLに出力することがうまくできない模様なのです。この部分でおかしなところがあれば、ご指摘をいただければと思います。どうぞ宜しくお願いいたします。

すると、全ての回答が全文表示されます。

関連するQ&A