簡體   English   中英

遞歸cURL函數php

[英]Recursive cURL function php

我在使用php函數時遇到問題,它是一個遞歸函數-似乎可以正常工作,因為如果我轉儲數組,我會看到項目已添加到數組中。 但是當我想返回數組時,我得到一個null

api函數是處理http curl的api調用的http curl包裝函數-正常工作, $arr get填充了db_address項目-但返回不返回數組-如果我var_dump結果我得到了Null ,如果我print_r結果只得到1

function get_all_db_addresses($arr, $skip){
if(!isset($arr)){
    $arr = [];
}
if(!isset($skip)){
    $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;
    get_all_db_addresses($arr, $skip);
}
}

我在這里做錯什么了嗎? 我看不到我在做什么錯..

您需要創建全局變量並將其下一個數組合並

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;

}

不確定,但是可能無法正常工作,因為我無法測試您的數據

嘗試這個:

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個問題:

  1. 您執行遞歸調用時沒有return語句
  2. 如果您使用null執行array_merge,則將獲得null

檢查一下:

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;
}

您的代碼中的問題:

  1. 如果要更改參數References Explained的值,則應將函數參數傳遞給reference。
  2. 如果希望函數返回值,則應始終返回一個值(具有指定的類型)。
  3. 可以在新的PHP版本中直接設置默認參數值,但這不會破壞您的代碼,而只是破壞編碼樣式。

解:

您的功能應對此進行修改,以使其正常工作(未經測試):

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM