如何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还要求回调的第一个参数是引用,如果希望它修改数组。 因此,仍然为每个元素调用ceil(),但由于它没有将值作为引用,因此它不会更新数组。

array_map更适合这种情况。

我在另一个PHP函数上遇到了同样的问题。您可以创建"自己的 ceil 函数"。在这种情况下,很容易解决:

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
)

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

您可以执行的操作:

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

如果要保存这些值,请继续使用返回数组的array_map

更新

我建议在stackoverflow上阅读这个答案,它很好地解释了array_maparray_walkarray_filter之间的区别

希望这有帮助。

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

function myCeil(&$value){
    $value = ceil($value);
}
$numbs = array(3, 5.5, -10.5); 
array_walk($numbs, "myCeil"); 
print_r($numbs);