循环php数组到json打印索引值

时间:2018-02-07 06:47:25

标签: php arrays json loops

我一直试图遍历一个数组。将值插入两个单独的数组$ location和$ name。但是$ name数组也打印了索引值,$ location工作正常。 这是代码示例

$j = 0;
foreach( $entities->results as $key => $value ) {

    if( stristr($value->vicinity, $key_stroke) ) {

        $location[$j]['place_id'] = $value->place_id;
        $location[$j]['vicinity'] = $value->vicinity;
    }

    if( stristr($value->name, $key_stroke) ) {

        $name[$j]['place_id'] = $value->place_id;
        $name[$j]['name'] = $value->name;
    }


 $j++; }

这是json输出

{
    "locations": [
        {
            "place_id": "ChIJRQqyYRFZWjcRmxKd0esyj-k",
            "vicinity": "GS Road, Christian Basti, Guwahati"
        },
        {
            "place_id": "ChIJG5IvxhNZWjcRlkMD6lCJ64c",
            "vicinity": "GS Road, Ananda Nagar, Christian Basti, Guwahati"
        },
        {
            "place_id": "ChIJxQp72BZZWjcR98oQbFrdTII",
            "vicinity": "GS Road, Christian Basti, Guwahati"
        },
        {
            "place_id": "ChIJm5eeJBBZWjcRksI_VY9u1Qo",
            "vicinity": "Zoo Road, Sundarpur, Guwahati"
        }
    ],
    "names": {
        "1": {
            "place_id": "ChIJG5IvxhNZWjcRlkMD6lCJ64c",
            "name": "Ayush Medico's"
        },
        "2": {
            "place_id": "ChIJxQp72BZZWjcR98oQbFrdTII",
            "name": "Premananda Medico's"
        },
        "3": {
            "place_id": "ChIJm5eeJBBZWjcRksI_VY9u1Qo",
            "name": "Asaan Medicos"
        }
    }
}

尝试了一切。可能是什么问题??

2 个答案:

答案 0 :(得分:1)

解决方案1 ​​:(效率不如下面的解决方案2)

$j = 0;
$i = 0; // change over here
foreach( $entities->results as $key => $value ) {

    if( stristr($value->vicinity, $key_stroke) ) {

        $location[$j]['place_id'] = $value->place_id;
        $location[$j]['vicinity'] = $value->vicinity;
        $j++;
    }

    if( stristr($value->name, $key_stroke) ) {

        $name[$i]['place_id'] = $value->place_id; // change over here
        $name[$i]['name'] = $value->name;         // change over here
        $i++;
    }

}

解决方案2:

$name数组传递给php的内置函数array_values(),后者将返回从0开始的数组索引。

答案 1 :(得分:0)

如果仔细观察,您会注意到在JSON中,"location"的值是一个数组,但"names"的值是一个对象(具有属性"1",{{1 }和"2")。发生这种情况是因为"3"是一个数组,其中包含与键$location401相关联的2个值{{1} }是一个数组,其键为3$name1

因为JSON是JavaScript的子集,JavaScript数组只允许使用数字键(从2开始),所以PHP只将具有数字连续键的数组编码为JavaScript数组3。所有其他数组都以JSON编码为对象。

这是用documentation of json_encode()

写的
  

注意:

     

对数组进行编码时,如果键不是从0开始的连续数字序列,则所有键都被编码为字符串,并为每个键值对明确指定。

0不包含密钥0的原因是包含分配的$names条件:

0

包含if赋值的类似条件可使if( stristr($value->name, $key_stroke) ) { 与不同的输入数据行为相似。

如果要在JSON编码的输出中获取数组,则必须以确保键是以$location[$j]开头的连续整数的方式构建它们。这比听起来容易。没有必要跟踪密钥,只需以不同的方式构建内部数组,并让外部数组的PHP generate the keys

$location