我只想将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_map
,array_walk
和array_filter
之间的区别
希望这有帮助。
这是因为array_walk
需要第一个参数是引用&
的函数
function myCeil(&$value){
$value = ceil($value);
}
$numbs = array(3, 5.5, -10.5);
array_walk($numbs, "myCeil");
print_r($numbs);