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

9 php arrays ceil

我只是想用array_walk()ceil()圆阵列中的所有元素.但它不起作用.

代码:

$numbs = array(3, 5.5, -10.5); 
array_walk($numbs, "ceil"); 
print_r($numbs);  
Run Code Online (Sandbox Code Playgroud)

输出应为:3,6,-10

错误消息:

警告:ceil()预计在第2行给出1个参数,2

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

我也尝试过round().

Roc*_*mat 10

array_map改用.

$numbs = array(3, 5.5, -10.5);
$numbs = array_map("ceil", $numbs);
print_r($numbs);
Run Code Online (Sandbox Code Playgroud)

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

array_walk如果要修改数组,还需要回调的第一个参数作为引用.因此,ceil()仍然会为每个元素调用,但由于它没有将值作为引用,因此它不会更新数组.

array_map 对这种情况更好.


B00*_*01ᛦ 3

我在使用另一个 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
)
Run Code Online (Sandbox Code Playgroud)