Я создаю файл data.php, который возвращает файл json в html-файл, где я заполняю сетку данными из файла data.php.
Мне нужно, чтобы это был ассоциативный массив в следующей форме:
[
{"CompanyName":"Alfreds Futterkiste","ContactName":"Maria Anders","ContactTitle":"Sales Representative"},
{"CompanyName":"Ana Trujillo Emparedados y helados","ContactName":"Ana Trujillo","ContactTitle":"Owner"},
{"CompanyName":"Antonio Moreno Taquera","ContactName":"Antonio Moreno","ContactTitle":"Owner"}
]
Теперь проблема в том, что я хочу, чтобы этот data.php был родовым, что означает, что я не знаю ни имен столбцов, ни количества столбцов.
Единственный способ сделать это — использовать оператор switch, но это не идеально (потому что я могу сделать несколько случаев, но что, если в таблице есть еще один столбец), и при этом не очень элегантно.
Могу поспорить, что это можно сделать гораздо лучше, есть идеи?
Я попытался использовать array_push (), но это не работает с ассоциативными массивами.
// get columnnames
for ($i = 0; $i < $result->columnCount(); $i++) {
$col = $result->getColumnMeta($i);
$columns[] = $col['name'];
}
// fill up array
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
switch (count($columns);) {
case 1 :
$records[] = array($columns[0] => $row[$columns[0]]);
break;
case 2 :
$records[] = array($columns[0] => $row[$columns[0]], $columns[1] => $row[$columns[1]]);
break;
case 3 :
$records[] = array($columns[0] => $row[$columns[0]], $columns[1] => $row[$columns[1]], $columns[2] => $row[$columns[2]]);
break;
case ... // and so on
}
}
// send data to client
echo json_encode($records);
изменить сегмент кода коммутатора с этим
$arr_tmp = array();
for($i = 0; $i < count($columns); $i++)
{
$arr_tmp[$columns[$i]] = $row[$columns[$i]]
}
$records []= $arr_tmp;
Вы можете перебрать столбцы:
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
$values = array();
foreach ($columns as $column) {
values[$column] = $row[$column];
}
records[] = $values;
}