PHP填充关联数组

3
我将创建一个data.php文件,该文件将返回一个json文件给一个html文件,在该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);

3
如果我正确理解这段代码的逻辑,我认为它可以简化为仅使用fetchAll()函数,如下所示: $records = $result->fetchAll(PDO::FETCH_ASSOC); echo json_encode($records); http://php.net/manual/en/pdostatement.fetchall.php,因为`fetchAll()`将检索所有记录的2D关联数组,而不管列数。 - Michael Berkowski
你可以使用循环来实现。 - frz3993
谢谢Michael,在这种情况下甚至不需要使用循环。很棒的解决方案。 - Marc Van der Smissen
2个回答

1

使用这个代码片段替换开关代码段

$arr_tmp = array();
for($i = 0; $i < count($columns); $i++)
{
    $arr_tmp[$columns[$i]] = $row[$columns[$i]];
}
$records []= $arr_tmp;

0
你可以遍历列:
while ($row = $result->fetch(PDO::FETCH_ASSOC))  {
    $values = array();
    foreach ($columns as $column) {
        values[$column] = $row[$column];
    } 
    records[] = $values;
}

我更喜欢你的回答,虽然它们基本上相同,但是你使用了foreach循环,这使得代码更加易读。谢谢!为了使其正常工作,请在values[$column]和records[]之前添加$。 - Marc Van der Smissen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接