PHP / HTML — Как поместить столбцы из одного и того же «$ row» разных условий рядом?

#php #html

#php #HTML

Вопрос:

У меня есть php-код, использующий цикл «foreach» с условием «if» и данными из SQL. Я хочу разделить результаты на два разных столбца в зависимости от их условий. Это код:

 foreach($data as $row) {

if($row['Code'] == 235 amp;amp; $row['PR'] == 592735 amp;amp; $row['Status'] == "todo" ) {
    echo "<tr><td>" . $row['Column'] . "</td>";
    
    }
if($row['Code'] == 235 amp;amp; $row['PR'] == 592705 amp;amp; $row['Status'] == "todo") {
    echo "<td>" . $row['Column'] . "</td>";

}
echo "</tr>";

}
 

Теперь моя проблема в том, что все строки печатаются в одном столбце, как список, вот так:

Столбец
строка (условие1)
строка (условие1)
строка (условие2)
строка (условие2)

Я хотел разделить оба условия на два столбца:

Условие1 Условие2
строка строка
строка строка

Я пытался играть с html, но это не работает. Есть ли какой-нибудь способ добиться этого с помощью php? Кстати, я новичок в PHP.

Комментарии:

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

2.Поместите свое за echo '<tr>' пределы первого условия, как и перед ним.

3. @El_Vanja нет, количество элементов не всегда будет одинаковым

4. @GetSet я пробовал, но это тоже не работает.

5. В этом случае ответ Натанаэля кажется оптимальным.

Ответ №1:

Просто разделите свой массив на два массива, а затем сгенерируйте html с полученными массивами

 $condition1 = $condition2 = [];
foreach($data as $row) {
    if($row['Code'] == 235 amp;amp; $row['PR'] == 592735 amp;amp; $row['Status'] == "todo" ) {
        $condition1[] =  $row['Column'];
    }
    if($row['Code'] == 235 amp;amp; $row['PR'] == 592705 amp;amp; $row['Status'] == "todo") {
        $condition2[] = $row['Column'];
    }
}

for($k=0; $k < max(count($condition1),count($condition2));$k  ) {
    echo '<tr><td>'.($condition1[$k] ?? '').'</td><td>'. ($condition2[$k] ?? '').'</td></tr>';
}
 

Ответ №2:

Вы пробовали это? Если первое условие заполняет первый столбец результатом, а второе — пустым, иначе заполните первый столбец пустым, а второй — данными

 foreach($data as $row) {

echo "<tr>";
if($row['Code'] == 235 amp;amp; $row['PR'] == 592735 amp;amp; $row['Status'] == "todo" ) {
    echo "<td>" . $row['Column'] . "</td>";
    echo "<td></td>";
}
if($row['Code'] == 235 amp;amp; $row['PR'] == 592705 amp;amp; $row['Status'] == "todo") {
    echo "<td></td>";
    echo "<td>" . $row['Column'] . "</td>";

}
echo "</tr>";

}
 

Комментарии:

1. Проблема в том, что «<tr>» создает строку внутри условия. Чего не должно быть, это видно по закрытию «</ tr>» вне условия.

2. Это работает, но не похоже на то, что я имею в виду. Ячейки из столбцов 1 и 2 не являются встроенными, поэтому они дают пустые ячейки.