这是在php中获得数组的abs的简单方法?必须有更好的办法。这是有效的,但是在多维数组中它有一些限制
function make_abs($numbers) {
$abs_array = array();
foreach($numbers as $key=>$value)
$abs_array[$key] = abs($value);
return $abs_array;
}
使用map函数:
array_map("abs", $numbers)
http://php.net/manual/en/function.array-map.php 使用引用的变量(这并不能解决递归问题,仅供参考):
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。这个函数的问题是,它期望回调函数有两个参数,value(通过引用)和key。许多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');
编辑
$numbers = array(1, 35, 107);
function make_abs(&$item,$key) { // use with reference
$item = abs($item);
}
array_walk_recursive($numbers, 'make_abs');
这个例子使用多维数组