2011-10-14 42 views
2

哪一種獲得php數組的abs的簡單方法?它必須是一個更好的方法。這工作,但在多維數組它有一定的侷限性abs的陣列

function make_abs($numbers) { 
$abs_array = array(); 

foreach($numbers as $key=>$value) 
    $abs_array[$key] = abs($value); 

return $abs_array; 
} 
+1

你可以使用'array_walk',但是那個代碼不是那*複雜的。 – zzzzBov

+0

我在考慮使用某些東西作爲參考,但我不知道如何使用它 –

+0

參考方法只是:foreach($數字爲&$值)$ value = abs($ value);但是,array_walk更適合您的目的。 –

回答

2

你的變種使用引用(這不解決您的遞歸問題,只是FYI):

function make_abs(&$numbers) 
{ 
    foreach($numbers as &$value) 
     $value = abs($value) 
    ; 
} 

對於遞歸問題,你需要一步到每個陣列:

function make_abs(&$numbers) 
{ 
    foreach($numbers as &$value) 
     is_array($value) ? make_abs($value) : $value = abs($value) 
    ; 
} 

PHP本身有一個方便的功能,array_walk_recursiveDocs。該函數的問題是,它期望回調有兩個參數,值(通過引用)和鍵。許多PHP函數不符合這些要求。您可以通過創建一個幫助函數來解決該問題,以使用任何僅使用一個參數並返回修改後的值的函數。你通過功能array_mapDocs

function array_walk_recursive_map(array &$array, $callback) 
{ 
    $byRef = function(&$item, $key) use ($callback) 
    { 
     $item = $callback($item); 
    }; 
    array_walk_recursive($array, $byRef); 
} 

# Usage: 
array_walk_recursive_map($numbers, 'abs'); 

希望這是有幫助的。