3

私はphpが初めてで、調査した後、理解できる答えが見つかりませんでした。私はhtmlでphpを使用しています。テキスト ファイル (file_get_contents) から読み込んでいます。最初の項目が「ハンバーガー」(burgers.txt) であるレストラン メニューを作成しています。2番目は「チキン」などです。これらのテキストファイルを分解機能を使用して分離しています。これが私のコードです

<?php

$dir = 'C:\xampp\htdocs\posplus\txtfiles';
$dh  = opendir($dir);
while (false !== ($filename = readdir($dh))) {
    $files[] = $filename;//array of files
}
$dot = array_shift($files);
$dotdot = array_shift($files);

$numfiles = count($files);//counts number of text files
for($f=0;$f<$numfiles;$f++)
{
$filearray = array();
$filearray[$f] = file("txtfiles/".$files[$f]);  //txtfile."burgers.txt"
$linessarray = array();
$linesarray[$f] = count($filearray[$f]);  //number of lines in each file (to be           displayed on different lines)
$namesarray = array();
$namesarray[$f] = pathinfo($files[$f]);  //get name of file without extension(.txt) 
${'array'.$f} = explode("\n", file_get_contents("txtfiles/".$files[$f]));

?>
</head>

<body>
<?php

echo'<table align="center">
    <tr>
    <th colspan = "3">'.$namesarray[$f]['filename'].'</th>
</tr>';
//filename without ".txt"
for ($i=0; $i<$linesarray[$f]; $i++) { //loop through each text file

$part = explode(',', ${'array'.$f}[$i]);//split each line in text file by comma example       (cheeseburger, large, €3.00, made from finest beef)
  echo'<tr>

        <td id="name">'.$part[0].'</td>

        <td id="size">'.$part[1].'</td> 

        <td id="price">'.$part[2].'</td>    

 </tr>
 <tr>
        <td id="desc" colspan="3">'.$part[3].'</td> 
 </tr>';
}}

?>

上記のコードは、テーブルを次々とうまく印刷しています。私の問題は、動的にする必要があることです。このジョブは、表示メニューであるため、1 画面分しか使用する必要がありません。フォントが特定のサイズの場合、たとえばページに10個のアイテムしか必要ないという方法で動的にする必要があります。最初のページの項目 1 ~ 10、2 番目のページの 11 ~ 20 など。サイズ計算は問題ありませんが、私のコードからわかるように、テキスト ファイルをループしています。特定の数のアイテムの後に改ページなどを行う必要があります。たとえば、最初のtxtファイルに6つのアイテムがあり、2番目のファイルに8つのアイテムがある場合、2番目のファイルに4つのアイテムを改ページする必要があります。

私が考えることができる唯一の方法は、このような foreach merge_recursive ループです

$newArray = array_merge_recursive($array0, $array1, $array2); //merge burgers.txt with chicken.txt, etc

foreach ($newArray as $key => $value) {
      echo "$key - $value <br />"; 
}

これにより、配列がマージされ、それらすべてにキーが割り当てられ、$newArray 内の 10 個の項目の後で改ページできるようになります。問題は、読み取るテキスト ファイルの数がわからないため、上記のようにハード コードできないことです。ある配列が前の配列に追加されるある種のループを介して、すべての配列をマージする方法はありますか?

私が言ったように、私は初心者であり、助けがほとんどないので、助けていただければ幸いです。上記のコードも非常に貧弱であることを認識しているため、より良い方法の提案も役立つ場合があります。長々とした質問で申し訳ありません。私に気楽に行ってください。

4

2 に答える 2

1

すべての配列をマージできます。つまり、次のようになります。

$allData = array();
for($f=0;$f<$numfiles;$f++)
{
    $filearray = array();
    $filearray[$f] = file("txtfiles/".$files[$f]);  //txtfile."burgers.txt"
    $linessarray = array();
    $linesarray[$f] = count($filearray[$f]);  //number of lines in each file (to be           displayed on different lines)
    $namesarray = array();
    $namesarray[$f] = pathinfo($files[$f]);  //get name of file without extension(.txt) 
    $allData = array_merge($allData, explode("\n", file_get_contents("txtfiles/".$files[$f])));
}

次のステップでは、 $allData 配列を断片にチャンクできます

foreach (array_chunk($allData, 10) as $chunk) {
    foreach($chunk as $singlePosition) {
     //echo
    }
    echo 'separator';
} 
于 2013-10-22T16:49:01.003 に答える
0

ご協力いただきありがとうございます。さんの情報大変参考になります。ただし、この方法を使用しているときに、最初のテキスト ファイルに 15 行あるとしたら、10 行目以降と 15 行目以降で分割され、15 行目 (16-25) の後に次のチャンクが開始されます。理想的には、テキスト ファイルのサイズに関係なく、0 ~ 10、10 ~ 20、20 ~ 30 行を表示する必要があります。言い換えれば、複数のテキスト ファイルの内容を同じ 10 個のチャンクに表示できるようにすることです。明らかに何かが欠けているのかもしれませんが、それを修正する方法がわかりません。これが私のコードです。divを使用してチャンクを分離しています

<?php

$dir = 'C:\xampp\htdocs\posplus\txtfiles';
$dh  = opendir($dir);
while (false !== ($filename = readdir($dh))) {
  $files[] = $filename;//array of files
}
$dot = array_shift($files);
$dotdot = array_shift($files);

$numfiles = count($files);//counts number of text files
for($f=0;$f<$numfiles;$f++)
{
$filearray = array();
$filearray[$f] = file("txtfiles/".$files[$f]);
$numlinesarray = array();
$numlinesarray[$f] = count($filearray[$f]);//number of lines in each file (to be displayed on     different lines)

$namesarray = array();
$namesarray[$f] = pathinfo($files[$f]);//get name of file without extension(.txt) 
$allData = array();
$allData = array_merge($allData, explode("\n", file_get_contents("txtfiles/".$files[$f]))); 
?>
</head>

<body>
<div id = "container">

<?php
foreach (array_chunk($allData, 21) as $chunk) {

echo'<div class ="col1"><table align="center">
<tr>
    <th colspan = "3">'.$namesarray[$f]['filename'].'</th>
</tr>';
foreach($chunk as $singlePosition) {


    $part = explode(',', $singlePosition);

    echo'<tr>
             <td id="name">'.$part[0].'</td>
             <td id="size">'.$part[1].'</td>    
             <td id="price">'.$part[2].'</td>   

         </tr>';
}
echo '</table></div>';

   }    
} 
?>
</div>

于 2013-10-25T09:56:14.587 に答える