如何让 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
还要求回调的第一个参数是 reference 如果你想让它修改数组。因此,仍然为每个元素调用 ceil()
,但由于它没有将值作为参考,因此没有更新数组。
array_map
更适合这种情况。
我在另一个 PHP 函数中遇到了同样的问题。
您可以创建 "your own ceil function"。
这样的话就很容易解决了:
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
)
那是因为array_walk
需要第一个参数是引用的函数&
function myCeil(&$value){
$value = ceil($value);
}
$numbs = array(3, 5.5, -10.5);
array_walk($numbs, "myCeil");
print_r($numbs);
它不起作用的原因是因为 ceil($param)
只需要一个参数而不是两个。
你可以做什么:
$numbs = array(3, 5.5, -10.5);
array_walk($numbs, function($item) {
echo ceil($item);
});
如果您想保存这些值,请继续使用 array_map
,其中 returns 一个数组。
更新
我建议阅读 Whosebug 上的这个 answer,它很好地解释了 array_map
、array_walk
和 array_filter
之间的区别
希望对您有所帮助。
我只想使用 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
还要求回调的第一个参数是 reference 如果你想让它修改数组。因此,仍然为每个元素调用 ceil()
,但由于它没有将值作为参考,因此没有更新数组。
array_map
更适合这种情况。
我在另一个 PHP 函数中遇到了同样的问题。 您可以创建 "your own ceil function"。 这样的话就很容易解决了:
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
)
那是因为array_walk
需要第一个参数是引用的函数&
function myCeil(&$value){
$value = ceil($value);
}
$numbs = array(3, 5.5, -10.5);
array_walk($numbs, "myCeil");
print_r($numbs);
它不起作用的原因是因为 ceil($param)
只需要一个参数而不是两个。
你可以做什么:
$numbs = array(3, 5.5, -10.5);
array_walk($numbs, function($item) {
echo ceil($item);
});
如果您想保存这些值,请继续使用 array_map
,其中 returns 一个数组。
更新
我建议阅读 Whosebug 上的这个 answer,它很好地解释了 array_map
、array_walk
和 array_filter
希望对您有所帮助。