[英]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
与键相关联的值0
, 1
, 2
和3
,同时$name
是一个数组,其键是1
, 2
和3
。
因为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.