繁体   English   中英

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

[英]Looping php array to json prints index value

我一直在尝试遍历数组。 将值插入两个单独的数组$ 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"
        }
    }
}

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

解决方案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开始的数组索引返回您。

如果仔细观察,您会发现在JSON中, "location"的值是一个数组,而"names"的值是一个对象(具有属性"1""2""3" )。 这是因为$location是包含数组4与键相关联的值0123 ,同时$name是一个数组,其键是123

因为JSON是JavaScript的子集,并且JavaScript数组仅允许数字键(从0开始),所以PHP仅将数字连续键从0开始的数组编码为JavaScript数组。 所有其他数组均以JSON编码为对象。

这写在json_encode()文档中

注意:

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

$names不包含键0是包装分配的if条件:

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

包装$location[$j]赋值的相似条件可以使$location在不同输入数据下的行为类似。

如果要在JSON编码的输出中获取数组,则必须以确保键为从0开始的连续整数的方式构建它们。 这比听起来容易。 无需跟踪键,只需以其他方式构建内部数组,然后让PHP 生成外部数组的键即可

$location = array();
$name     = array();

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

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

        $location[] = array(
           'place_id' => $value->place_id,
           'vicinity' => $value->vicinity,
        );
    }

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

        $name[] = array(
            'place_id' => $value->place_id,
            'name'     => $value->name,
        );
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM