Я просто хочу использовать 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()
,
У меня была такая же проблема с другой функцией PHP.
Вы можете создать «свою собственную функцию ceil».
В этом случае это очень легко решить:
function myCeil(&$list){
$list = ceil($list);
}
$numbs = array(3, 5.5, -10.5);
array_walk($numbs, "myCeil");
print_r($numbs);
использование 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
лучше для этой ситуации.
Причина этого не в том, что ceil($param)
ожидает только один параметр вместо двух.
Что ты можешь сделать:
$numbs = array(3, 5.5, -10.5);
array_walk($numbs, function($item) {
echo ceil($item);
});
Если вы хотите сохранить эти значения, тогда используйте array_map
который возвращает массив.
ОБНОВИТЬ
Предлагаю прочитать это ответ на стеке потока, который очень хорошо объясняет различия между 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);