json_encode返回列名和数组索引

时间:2017-04-13 10:48:35

标签: php json

我的代码存在一个小问题。我想要做的是将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);
}

3 个答案:

答案 0 :(得分:2)

array_filterARRAY_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);