【发布时间】:2015-05-29 12:55:41
【问题描述】:
我正在创建一个 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);
【问题讨论】:
-
如果我理解这段代码的逻辑,我相信它可以被简化为只使用
fetchAll(),如$records = $result->fetchAll(PDO::FETCH_ASSOC); echo json_encode($records);php.net/manual/en/pdostatement.fetchall.php 因为fetchAll()将检索一个二维关联数组的所有记录,无论列数如何。 -
你可以使用循环来做到这一点。
-
谢谢迈克尔,在这种情况下甚至不需要循环。很好的解决方案。
标签: php associative-array associative array-push