PHP调用array_push报参数需为array却传入string,如何得到预期返回
错误原因
array_push()函数用法不符合规范:该函数要求第一个入参必须是待操作的数组对象,第二个及之后的入参才是需要追加到数组中的值。你直接将字符串类型的$row['name']作为第一个入参传入,参数类型不匹配,因此触发了该报错。
另外结合你给出的预期返回结果判断,你根本不需要使用array_push()函数:你需要实现的是给$aa数组新增键为国家iso2编码、值为对应国家名称的元素,直接对数组指定键赋值即可。
修正后代码
$data['status'] = 'success'; $data['msg'] = 'OK'; $aa = array(); if (!empty($countries)) { foreach ($countries as $row) { $b = $row['iso2']; $aa[$b] = $row['name']; } } $data['result'] = $aa; return setJSON($data);
输出结果
修改后返回的JSON完全符合你的预期:
{ "status": "success", "msg": "OK", "result": { "DE": "Germany" } }
补充说明(后续需要用到array_push的场景参考)
如果你确实需要往数组末尾追加元素,正确写法如下:
// 写法1:使用array_push array_push($target_array, $value1, $value2); // 写法2:直接用数组追加语法,性能比array_push更优 $target_array[] = $value1;
内容的提问来源于stack exchange,提问作者Boris
相关产品推荐
相关产品推荐

