我的代码存在一个小问题。我想要做的是将select的结果显示为json。我就是这样做的:
foreach ($query as $row) {
$test = json_encode($row);
}
但它返回:
{0: "34.8", 1: "1441098255", 2: "1", col1: "34.8", col2: "1441098255", col3: "1"}
我想要这样:
{0: "34.8", 1: "1441098255", 2: "1"}
或者这个:
{col1: "34.8", col2: "1441098255", col3: "1"}
我尝试what they say here,但无济于事。
编辑 :回复很有帮助,他们会按我的意愿行事。现在的问题是,我有一些偷偷摸摸的部分,由于某种原因似乎无法摆脱。这是生成的json字符串:
{"col1":"34.8","0":"34.8","col2":"1441098255","col3":"1"}
“0”:“34.8”似乎不想离开,我完全不知道它来自哪里,如果我改变列顺序,它总是重复任何列首先出现。如果我把“col3”作为第一个,它会显示:
{"col3":"1","0":"1","col2":"1441098255","col1":"34.8"}
Edit2: 原来解决方案比我尝试的简单得多。以下是如何正确显示它:
while ($arr = $query->fetch(PDO::FETCH_ASSOC)) {
echo json_encode($arr);
}
答案 0 :(得分:2)
将array_filter与ARRAY_FILTER_USE_KEY
标志
$keys = ["col1", "col2", "col3"];
foreach ($query as $row) {
$filtered = array_filter((Array) $row, function($key) use($keys) {
return in_array($key, $keys);
}, ARRAY_FILTER_USE_KEY);
$test = json_encode($filtered);
}
注意:如果您的$row
数组不是对象,则不需要将其强制转换为数组(Array) $row
答案 1 :(得分:0)
您可以使用array_chunk获取$ row的前三个元素。
json_encode(array_chunk($row, 3, true)[0]);
答案 2 :(得分:0)
$data=array();
foreach ($query as $row) {
$data[]=$row;
//$test = json_encode($row);
}
$test = json_encode( $data);