我不确定在PHP中使用哪种循环

时间:2018-09-21 00:52:38

标签: php

我是PHP的新手,我能够获得所需的输出,但是我一次将其定位在一个索引位置。我从.txt文件返回数据,我需要将此数据插入使用PHP创建的HTML表中。但是首先,我需要能够获得相同的输出而不必键入每个索引位置。我尝试使用forloop,但是它只输出一行。 我从文件中手动输出了行,并且可以正常工作。 PHP中的哪个循环最能达到相同的结果并输出这些元素?重要提示,因为我能够排序和排序(我希望能够做到这一点,以便可以在很棒的循环中实现它)任何帮助都比我现在拥有的更多。

PHP

$books = array();

 if ($fp)
{
    while(true)
    {
        $lines_in_file = count(file($filename));
        $line = fgets($fp); 

        if (feof($fp))
        {
            break;
        }
  $line_ctr++;

list($title, $author, $pubdate, $isbn) = explode('*', $line);

    $new_line = explode('*', $line);

    for($ii= 1; $ii <= $lines_in_file; $ii++){
        $lines = fgets($fp); //Read each line
        $member = trim($lines);
        array_push($books, $member);   
    }

    //This foreach only brings back the first like in the txt file, why?
 $cntr = 0;

    foreach($books as $element){
        $cntr++;
        $table .= "<tr>";
        $table .= "<td>".$title."</td>";
        $table .= "<td>".$author."</td>";
        $table .= "<td>".$pubdate."</td>";
        $table .= "<td>".$pubdate."</td>";
        $table .= "<td>".$isbn."</td>";
        $table .= "</tr>\n";  //added newline
        echo $element;
    }

  //sort($books);
   // rsort($books);
    echo $books[0];
    echo "<br>";
    echo $books[1];
    echo "<br>";
    echo $books[2];
    echo "<br>";
    echo $books[3];
    echo "<br>";
    echo $books[4];
    echo "<br>";
    echo $books[5];
    echo "<br>";
    echo $books[6];
    echo "<br>";
    echo $books[7];
    echo "<br>";
    echo $books[8];
    echo "<br>";
    echo $books[9];
    echo "<br>";
    echo $books[10];
    echo "<br>";
    echo $books[11];
    echo "<br>";
    echo $books[12];
    echo "<br>";
    echo $books[13];
    echo "<br>";
    echo $books[14];
    echo "<br>";
    echo $books[15];
    echo "<br>";
    echo $books[16];
    echo "<br>";
    echo $books[17];

}//END WHILE LOOP
fclose($fp ); //Close file
}

1 个答案:

答案 0 :(得分:1)

在这里需要做一些猜测,但是我相信文件看起来像这样:

$book_array=file('book_file.txt');
//print_r($book_array); //is it an array of the books, one book per array key

如果这是错误的,请告诉我

只要国际剑联不大,就将其读入数组:

foreach($book_array as $line){

    $line_sep=explode('*',$line);

//    with no sorting option you could just echo inside the loop
  //if you want to keep sorting options we have to keep the separated lines

    $new_book_array[]=$line_sep;
}

unset($book_array);//free up memory if needed
//print_r($new_book_array);//is it a multi-d array, book then the 4 elements

现在分隔每一行:

usort($new_book_array, function($a, $b) {
    return strcmp($a['0'], $b['0']);;
}); //this sorts on key 0 in your case title:

//print_r($new_book_array); // has it sorted properly

对新的多维数组进行排序:

echo '<table><tr><th>Title</th><th>Author</th><th>Pub Date</th><th>ISBN</th></tr>';

foreach($new_book_array as $book){
//print_r($book);  //is it each indervidual book array with 4 elements
      echo '<tr><td>'.$book[0].'</td><td>'.$book[1].'</td><td>'.$book[2].'</td><td>'.$book[3].'</td></tr>';
}
echo '</table>';

用于显示: 再次循环


<svg width="500px" height="500px" viewBox="0 0 100 100" style="border: navy solid 1px;">
  <g transform="translate(10 10) scale(0.5 0.5)">
  <path d="M0 50 A1 1 0 0 1 100 50 Z" fill="blue"></path>
  <path d="M0 50 A1 1 0 0 1 50 0 Z" fill="purple" opacity="0.7"></path>
  </g>
</svg>