[英]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.