Я пытаюсь, чтобы отобразить некоторые данные из файла CSV, и нужно показать только 4 первых строки. Каждый ряд находится внутри 'ul'
список. Прямо сейчас все показывает, так что все ul отображаются. Я пытался добавить еще один цикл «пока», но все сломалось.
Я уверен, что это легко для тех, кто привык кодировать в php. Я сейчас изучаю php, поэтому тщательно изучу хороший ответ, чтобы понять, какие изменения мне нужно сделать. Вот код:
<?php
$row = 1;
if (($handle = fopen($this->getBaseUrl()."csvfile/csv_test.csv", "r")) !== FALSE) {
echo '<ul>';
$count = 0;
while (($data = fgetcsv($handle, 1000, ",",'"')) !== FALSE) {
$name=$data[0];
$bonus=$data[1];
$start=$data[2];
$end=$data[3];
$brand=strtok($name, " - ");
$count++;
echo
'<li><ul><li><img width="90" height="40" src="'
.$this->getSkinUrl('images/logos/').strtolower($brand).'.jpg" /></li>';
echo '<li>'.$name.'</li>';
echo '<li class="bonus"><strong>'.$bonus.'</strong></li>';
echo '<li><span class="green">Start: '.$start.'</span></li>';
echo '<li><span class="red"><strong>end: '.$end.'</strong></span></li>';
echo '<li class="pdf"><a target="_blank" href="'
.$pdf.'" title=""><img src="'.$this->getSkinUrl('images/icon-pdf.png')
.'"/><br/>PDF</a></li></ul></li>';
?>
<?php
}
echo '</ul>';
fclose($handle);
}
else {
echo "NOPE.";
}
?>
while (($data = fgetcsv($handle, 1000, ",",'"')) !== FALSE)
является эквивалентом
while(true)
если вы добавите больше элементов к условию, вы будете проверять
while(true && true) // so loop carries on
так что если он найдет
while(true && false) // equates to false, so loop will stop
это останавливается.
так с правильными скобками, если у вас было:
while (
($data = fgetcsv($handle, 1000, ",",'"')) !== false // true
&&
$count < 5 // true
){}
Извините, но я не в состоянии проверить то, что я только что написал, но в принципе это ОДИН СПОСОБ остановиться на 4 итерациях.
Есть много других, многие из них более читабельны, чем эта.
Но я просто хотел ответить на ваш ближайший вопрос.
Я считаю, что foreach () намного легче читать, что-то вроде дампов, поэтому вы ЗНАЕТЕ, что происходит, вместо того, чтобы угадывать, что должно происходить:
$data = fgetcsv($handle, 1000, ",",'"');
// var_dump($data) // uncomment this to see what is happening
$count = 1;
foreach($data as $row){
if($count === 5) break;
// var_dump($row); // uncomment this to see what is happening
echo $row[0];
$count++;
// var_dump($count); // uncomment this to see what is happening
}
Опять же, не проверено, но иллюстрирует только еще один способ достичь того же.
Сделай один шаг, докажи это, переходи к следующему шагу.
Если это не сработает, раскомментируйте строки и отследите проблему — так вы должны думать и действовать.
НТН
Других решений пока нет …