2011-07-01 56 views
4

如何使用array_walk_recursive(),而不是這樣的:如何使用array_walk_recursive

function check_value($val){ 
    if(is_array($val)){ 
    foreach($val as $key => $value) 
     $val[$key] = check_value($value); 
    return $val; 
    } 

    return clean_value($val); 
} 

回答

0

這應該工作:

function check_value ($val) { 
    if (is_array ($val)) array_walk_recursive ($val, 'check_value'); 
    return clean_value ($val); 
} 
+0

我不認爲這樣做同樣的事情,OP的代碼。 –

1

我會重寫clean_value函數取一個引用參數。 例如,這兩個片段在功能上是相同的:

1:

function clean_value($value) { 
    //manipulate $value 
    return $value; 
} 

$value = clean_value($value); 

2:

function clean_value(&$value) { 
    //manipulate $value 
} 

clean_value($value);  

對於後者(2),我們可以用它在array_walk_recursive如下:

array_walk_recursive($value_tree, 'clean_value'); 

如果我們不能編輯clean_value,我會如下解決這個問題:

$clean_by_reference = function(&$val) { 
    $val = clean_value($val); 
}; 
array_walk_recursive($value_tree, $clean_by_reference); 

希望這有助於!

8

我認爲這應該做同樣的事情。請注意,函數的參數作爲參考傳遞(即&$value)。

array_walk_recursive($array, function(&$value) { 
    $value = clean_value($value); 
}); 

對於老版本PHP:

function check_value(&$value) { 
    $value = clean_value($value); 
} 
array_walk_recursive($array, 'check_value'); 
+0

解析錯誤:語法錯誤,意外T_FUNCTION – BestDeveloper

+0

@BestDeveloper,很可能您的PHP版本太舊了。我已經更新了我的答案。 – Karolis

相關問題