哪一種獲得php數組的abs的簡單方法?它必須是一個更好的方法。這工作,但在多維數組它有一定的侷限性abs的陣列
function make_abs($numbers) {
$abs_array = array();
foreach($numbers as $key=>$value)
$abs_array[$key] = abs($value);
return $abs_array;
}
哪一種獲得php數組的abs的簡單方法?它必須是一個更好的方法。這工作,但在多維數組它有一定的侷限性abs的陣列
function make_abs($numbers) {
$abs_array = array();
foreach($numbers as $key=>$value)
$abs_array[$key] = abs($value);
return $abs_array;
}
你的變種使用引用(這不解決您的遞歸問題,只是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_recursive
Docs。該函數的問題是,它期望回調有兩個參數,值(通過引用)和鍵。許多PHP函數不符合這些要求。您可以通過創建一個幫助函數來解決該問題,以使用任何僅使用一個參數並返回修改後的值的函數。你通過功能array_map
Docs:
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');
希望這是有幫助的。
你可以做array_walk_recursive($numbers, 'make_abs');
http://php.net/manual/en/function.array-walk-recursive.php
編輯
$numbers = array(1, 35, 107);
function make_abs(&$item,$key) { // use with reference
$item = abs($item);
}
array_walk_recursive($numbers, 'make_abs');
本例將多維數組。
你可以使用'array_walk',但是那個代碼不是那*複雜的。 – zzzzBov
我在考慮使用某些東西作爲參考,但我不知道如何使用它 –
參考方法只是:foreach($數字爲&$值)$ value = abs($ value);但是,array_walk更適合您的目的。 –