簡體   English   中英

如何通過動態創建的參數(變量變量數組)在php中起作用?

[英]How to pass dynamically created arguments (variable variables arrays) to function in php?

我有一個自定義函數array_sequence_merge() 借助func_get_args() ,可以將任意數量的參數傳遞給函數,只要它們都是ARRAYS即可。

問題是,需要傳遞給函數的數組是使用未知大小的WHILE循環動態創建的:

while($n < count($site)) {
    $siten = $site[$n];
    $sql = "SELECT url FROM `".$$siten->domain."`";
    $result = $con->query($sql);
    while($row = $result->fetch_array()){
        ${$siten."_url_list"} = $row['url'];
    }
}

所以。 例如,如果$site數組中有3個元素,則得到的3個數組將是:

$element1_url_list
$element2_url_list
$element3_url_list

現在必須將它們傳遞給array_sequence_merge()函數以獲取:

array_sequence_merge($element1_url_list, $element2_url_list, $element3_url_list);

每次$site數組中的元素數量都不相同,動態創建的XXXXX_url_list數組的數量也不同。

問題:如何將那些數組變量傳遞給函數?

我采用的方法是在WHILE循環中創建動態數組變量名后立即將其存儲在臨時數組中。 但是我不確定下一步該怎么做...如果我只能做某種“參數列表串聯”,就像這樣:

$arguments = $temporary_array[0];
while($n < count($temporary_array)) {
    $arguments .= ",".$temporary_array[$n];
}

array_sequence_merge($arguments);

只是不確定如何正確地做...

像這樣使用call_user_func_array

call_user_func_array('array_sequence_merge', $arguments);

$ arguments是您的參數數組。

然后,將數組的每個元素作為“ array_sequence_merge”的單獨參數進行處理。

編輯以實現類似

array_sequence_merge($element1_url_list, $element2_url_list, $element3_url_list, ...);

您必須像這樣更改代碼:

$arguments = [];
while($n < count($site)) {
    $siten = $site[$n];
    $sql = "SELECT url FROM `".$$siten->domain."`";
    $result = $con->query($sql);
    while($row = $result->fetch_array()){
        $arguments[] = $row['url'];
    }
}

// $result contains the return value of the array_sequence_merge function call
$result = call_user_func_array('array_sequence_merge', $arguments);

因此,基本上不用創建$ elementN_url_list變量,而是將它們寫入數組$ arguments並將其作為第二個參數傳遞給call_user_func_array。

暫無
暫無

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

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