我一直试图遍历一个数组。将值插入两个单独的数组$ 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"
}
}
}
尝试了一切。可能是什么问题??
答案 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"
是一个数组,其中包含与键$location
,4
,0
和1
相关联的2
个值{{1} }是一个数组,其键为3
,$name
和1
。
因为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