MySQL CONCAT_WS три столбца, эхо приводит к циклу foreach после explode()
У меня есть это в результате MySQL
(хранится как $result
)
+-------------------------------------------------------------------------+
| CONCAT_WS('::', p.isMobile, p.contact_phone_id, p.contact_phone_number) |
+-------------------------------------------------------------------------+
| 0::1::123 |
| 1::2::456 |
| 0::3::789 |
| 1::4::987 |
| 0::5::654 |
| 0::6::321 |
| 1::7::123 |
| 1::11::456 |
+-------------------------------------------------------------------------+
Затем в цикле время я использую explode()
для каждого ряда вроде: explode('::', $result)
, Как я могу использовать foreach()
для вывода данных, как это (первые три строки в while
итерация как пример):
Row 1: The first column is 0, the second column is 1, the third column is 123
Row 2: The first column is 1, the second column is 2, the third column is 456
Row 3: The first column is 0, the second column is 3, the third column is 789
2 ответа
Там действительно нет веских причин использовать foreach для вывода здесь. Было бы намного проще просто взорвать (), а затем вывести поля так, как вы хотите (обратите внимание, что я создал массив и использовал для него array_shift() для имитации выборки строк из базы данных):
<?php
$data = ['0::1::123', '1::2::456', '0::3::789', '1::4::987', '0::5::654', '0::6::321', '1::7::123', '1::11::456'];
$rownum = 0;
while($row = array_shift($data)) {
echo "Row $rownum: ";
$fields = explode('::', $row);
echo "The first column is {$fields[0]}, the second column is {$fields[1]}, the third column is {$fields[2]}";
echo "\n";
++$rownum;
}
Тем не менее, если вы действительно привязаны к использованию foreach
для этой проблемы вы сначала захотите создать себе массив "имен позиций" (первое, второе, третье и т. д.), а затем зациклиться на THAT и извлекать тот же ключ из массива $row при генерации выход:
<?php
$data = ['0::1::123', '1::2::456', '0::3::789', '1::4::987', '0::5::654', '0::6::321', '1::7::123', '1::11::456'];
$positions = ['first', 'second', 'third'];
$rownum = 0;
while($row = array_shift($data)) {
echo "Row $rownum: ";
$fields = explode('::', $row);
$output = "";
foreach($positions as $pos => $posName) {
$output .= "the {$posName} column is {$fields[$pos]}, ";
}
$output = substr($output, 0, -2); // trim that trailing comma
echo "$output\n";
++$rownum;
}
Попробуй это.
$rowNumber = 1;
foreach($result as $value)
{
$field = explode('::', $value);
echo "Row {$rowNumber}: The first column is {$filed[0]}, the second column is {$field[1]}, the third column is {$field[2]}\n";
$rowNumber++;
}