如何让 array_walk 使用 PHP 内置函数?

How to get array_walk working with PHP built in functions?

我只想使用 array_walk()ceil() 来舍入数组中的所有元素。但它不起作用。

代码:

$numbs = array(3, 5.5, -10.5); 
array_walk($numbs, "ceil"); 
print_r($numbs);  

输出应该是:3,6,-10

错误信息:

警告:ceil() 需要 1 个参数,第 2 行给出 2 个

输出为:3,5.5,-10.5(与使用 ceil() 之前相同)

我也试过 round()

改用array_map

$numbs = array(3, 5.5, -10.5);
$numbs = array_map("ceil", $numbs);
print_r($numbs);

array_walk 实际上将 2 个参数传递给回调,一些内置函数不喜欢被调用太多参数(array_walk 的文档页面上有关于此的注释).这只是一个 警告,但这不是错误。

array_walk 还要求回调的第一个参数是 reference 如果你想让它修改数组。因此,仍然为每个元素调用 ceil(),但由于它没有将值作为参考,因此没有更新数组。

array_map 更适合这种情况。

我在另一个 PHP 函数中遇到了同样的问题。 您可以创建 "your own ceil function"。 这样的话就很容易解决了:

function myCeil(&$list){  
    $list =  ceil($list);  
}  

$numbs = [3, 5.5, -10.5];  
array_walk($numbs, "myCeil"); 

// $numbs output
Array
(
    [0] => 3
    [1] => 6
    [2] => -10
)

那是因为array_walk需要第一个参数是引用的函数&

function myCeil(&$value){
    $value = ceil($value);
}

$numbs = array(3, 5.5, -10.5); 
array_walk($numbs, "myCeil"); 
print_r($numbs); 

它不起作用的原因是因为 ceil($param) 只需要一个参数而不是两个。

你可以做什么:

$numbs = array(3, 5.5, -10.5); 
array_walk($numbs, function($item) {
    echo ceil($item);
}); 

如果您想保存这些值,请继续使用 array_map,其中 returns 一个数组。

更新

我建议阅读 Whosebug 上的这个 answer,它很好地解释了 array_maparray_walkarray_filter

之间的区别

希望对您有所帮助。