我只想使用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()
。
答案 0 :(得分:8)
改为使用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
更适合这种情况。
答案 1 :(得分:2)
我遇到了另一个PHP函数的问题。 您可以创建自己的ceil功能"。 在这种情况下,它很容易解决:
function myCeil(&$list){
$list = ceil($list);
}
$numbs = array(3, 5.5, -10.5);
array_walk($numbs, "myCeil");
print_r($numbs);
答案 2 :(得分:2)
这是因为array_walk
需要函数,第一个参数是引用&
function myCeil(&$value){
$value = ceil($value);
}
$numbs = array(3, 5.5, -10.5);
array_walk($numbs, "myCeil");
print_r($numbs);
答案 3 :(得分:2)
它不起作用的原因是因为ceil($param)
只需要一个参数而不是两个参数。
你能做什么:
$numbs = array(3, 5.5, -10.5);
array_walk($numbs, function($item) {
echo ceil($item);
});
如果要保存这些值,请继续使用返回数组的array_map
。
<强>更新强>
我建议您在stackoverflow上阅读此answer,这很好地解释了array_map
,array_walk
和array_filter
希望这有帮助。