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

时间:2015-01-22 15:07:31

标签: php arrays ceil

我只想使用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()

4 个答案:

答案 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_maparray_walkarray_filter

之间的差异

希望这有帮助。