我在使用 php 函数时遇到问题,它是一个递归函数-似乎可以正常工作,因为如果我转储数组,我会看到项目已添加到数组中。但是,当我想返回数组时,会得到一个'function' object has no attribute '__getitem__'
。
api函数是一个null
包装函数,可以处理api调用-可以正常工作,http curl
的{{1}}项也可以被填充-但返回不会返回数组-如果我$arr
的结果得到一个db_address
,如果我var_dump
的结果得到一个Null
。
print_r
我在这里做错什么了吗?我看不到我在做什么错..
答案 0 :(得分:0)
您需要创建全局变量并将下一个数组合并到其中
function get_all_db_addresses($skip)
{
if(!isset($skip)){
$skip = 0;
}
$db_addresses = json_decode(db_api('GET', 'DbAddress?$skip=' . $skip), true);
$arr = array();
if(!array_key_exists('@odata.nextLink', $db_addresses)){
$arr = array_merge($arr, $db_addresses['value']);
} else {
$skip += 20;
$arr = array_merge($db_addresses['value'], get_all_db_addresses($skip));
}
return $arr;
}
不确定,但是有可能因为我无法测试您的数据而起作用
答案 1 :(得分:0)
尝试一下:
function get_all_db_addresses($arr = [], $skip = 0){
$db_addresses = json_decode(db_api('GET', 'DbAddress?$skip=' . $skip), true);
$arr = array_merge($arr, $db_addresses['value']);
if(!array_key_exists('@odata.nextLink', $db_addresses)){
return $arr;
} else {
$skip += 20;
return get_all_db_addresses($arr, $skip);
}
}
您必须为递归调用添加返回语句。 提示:不要检查是否设置了参数-为其设置默认值。
答案 2 :(得分:0)
您有2个问题:
检查:
function get_all_db_addresses($arr = array(), $skip = 0)
{
$db_addresses = json_decode(db_api('GET', 'DbAddress?$skip=' . $skip), true);
if (isset($db_addresses['value'])) {
$arr = array_merge($arr, $db_addresses['value']);
}
if (array_key_exists('@odata.nextLink', $db_addresses)) {
return get_all_db_addresses($arr, $skip + 20);
}
return $arr;
}
答案 3 :(得分:0)
您的代码中的问题:
解决方案:
应该对此功能进行修改以使其正常工作(未经测试):
function &get_all_db_addresses(&$arr = [], $skip = 0) {
// ...
if(array_key_exists('@odata.nextLink', $db_addresses)){
get_all_db_addresses($arr, $skip + 20);
}
return $arr;
}