PHP - печать 4 таблиц в строке из 12, пропускает таблицы 5 и 10, не предполагается - PullRequest
0 голосов
/ 20 января 2012
$rowcount=0;
$prodcount=0;

while (($record = fgetcsv($handle, 1000, "|")) !== FALSE) { 

//here, the csv file is opened

$numrecords = count($record);

$produs=$record[1]; //records read
$pret=$record[3];
$imagine=$record[4];

if ($rowcount < $linecount) { 

//linecount is the number of lines in my csv file and i take 1 from it. for some reason it shows one extra entry when i use count()

    if($rowcount > 0) //this line skips the first csv line (table head)
    {
        if ($rowcount %5 != 0) {
//this line is where my problem lies. i think it's because of the modulus operator

            if ($prod_count==5) {$prod_count="1";} 
            if ($prod_count==1) {print ("<tr>");} //these two lines limit the drawn tables to 4 per row

            print "some table";
        }else {

//this line is where I think i can fix it. Just need to decrement $rowcount by one. $rowcount -= 1; thing is: it doesn't work for some reason when i take 1 from $rowcount, the whole script freezes and only displays 4 table out of 12, which is the number of rows minus the first one in my csv file.

            $table_lastrow=0;
            if ($rowcount <= $linecount){
                print ("</tr><tr><td height='30'></td></tr>");

            }

        }
    }}

$rowcount++;
$prod_count++;
}

Ответы [ 2 ]

0 голосов
/ 20 января 2012

Может быть, это больше соответствует тому, что вы хотите .. прочитайте строки и поместите первую строку в первом столбце, вторую во втором, третьем в третьем и 4. в 4. - 5. пропущено и 6 снова в первом столбце ....

$rowcount=0; 

// skip header row
fgetcsv($handle, 1000);

print "<table>";

while (($record = fgetcsv($handle, 1000, "|")) !== FALSE) { 
    if ($rowcount%5 == 0) print '<tr>'; //open row

    if ($rowcount%5 == 4) ;//skip 5. row 
    else print "<td>data</td>";

    if ($rowcount%5 == 3) print '</tr>'; //close row
    $rowcount++;
}
//need to be at the end because the if statement would otherwise never fulfill
//if ($rowcount <= $linecount)
print ("<tr><td height='30'></td></tr></table>");
0 голосов
/ 20 января 2012

Если я правильно понимаю, что вы хотите, вы значительно усложнили это, добавив множество дополнительных переменных, которые для этого не требуются.

Посмотрите, производит ли следующий код то, что вы ожидаете (обратите внимание, что это создает таблицу без данных, как и ваш код, потому что вы никогда не используете $produs, $pret или $imagine в любом месте) :

// Do this here to skip the header row
fgetcsv($handle, 1000);

echo "<table>\n  <tr>\n";

for ($prod_count = 0; ($record = fgetcsv($handle, 1000, "|")) !== FALSE; $prod_count++) { 

  $numrecords = count($record);
  $produs = $record[1];
  $pret = $record[3];
  $imagine = $record[4];

  if ($prod_count < $linecount) {
    if ($prod_count && (!$prod_count % 4)) echo "  </tr>\n  <tr>\n";
    echo "    <td height='30'></td>\n";
  }

}

echo "  </tr>\n</table>";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...