Неопределенная переменная в функции в PHP?

Я создал функцию под названием multiply (), которая принимает массив чисел, умножает каждое значение на число и возвращает массив:

<?php
  function multiply($arr, $factor)
  {
      $newArr = array_map(function ($number) {
          return $number * $factor; // line 5
      }, $arr);
      return $newArr;
  }
  $array = [2,4,6];
  $factor = 2;
  $result = multiply($array, $factor);
  print_r($result);
?>

Выход:

Undefined variable: factor .... on line 5

Я не понимаю, почему $factor в моем случае не определен?

Анонимная функция, используемая в вашем array_map(), имеет свою собственную область действия, а $factor недоступен в области действия вашей анонимной функции.

MonkeyZeus 30.07.2018 18:00

пожалуйста, проверьте php.net/manual/en/functions.anonymous.php, чтобы узнать больше об этом

schildi 30.07.2018 18:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
64
1

Ответы 1

Функция, используемая в array_map, имеет другую область видимости и не может видеть переменные вне ее. Вам нужно использовать ключевое слово use и передать $ factor в качестве дополнительного аргумента, чтобы он был доступен:

$newArr = array_map(function ($number) use ($factor) {
    return $number * $factor;
}, $arr);

Я добавляю в свой код слово «использование», но там написано «синтаксическая ошибка. Неожиданное использование ...»

juanli 30.07.2018 18:04

Попробуйте использовать (&factor)

Fobos 30.07.2018 18:31

Другие вопросы по теме