#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 не являются встроенными, поэтому они дают пустые ячейки.