PHP правильно читает мой массив моей корзины?

Я делаю интернет-магазин для новичков и столкнулся с проблемой. Я написал функцию для простого рисования элемента, если он определен. (поэтому он будет рисовать изображение с его описанием, только если товар действительно был добавлен в мою корзину).

Обратите внимание, что это явно не лучший способ сделать это. Но это должно работать.

Настройка моих предметов. Будет работать только в том случае, если они действительно определены в начале.

      $item1 = $_SESSION['item1'];
  $item2 = $_SESSION['item2'];
  $item3 = $_SESSION['item3'];
  $item4 = $_SESSION['item4'];
  $item5 = $_SESSION['item5'];

Вызов моей функции:

ValidateCart($item1, 'item1_name', 'item1_size', 'item1_price', 'item1_url');

Моя функция:

      function ValidateCart($item, $itemname, $itemsize, $itemprice, $itemurl)
  {
      $arr = array($item1, $item2, $item3, $item4, $item5);
      if (in_array($item, $arr)) {
        echo '<br><hr>';
        echo $_SESSION[$itemname]; echo '<br>';
        echo $_SESSION[$itemsize]; echo '<br>';
        echo '€ '; echo $_SESSION[$itemprice]; echo '<br><br>';
        $itemurl1 = $_SESSION[$itemurl];
        $itemurl2 = str_replace('url(', 'http://vintagefairytale.esy.es/', $itemurl1);
        $itemurl3 = str_replace(')', '', $itemurl2);

        echo '<img src='; echo $itemurl3; echo '></img>';
        echo '<hr>';
      }
  }

По сути, в моем ValidateCart() я создаю массив со всеми возможными элементами, и если элемент соответствует моему массиву, он будет продолжаться. Однако это не так.

Если я поменяю if (in_array($item, $arr)) на if (in_array($item1, $arr)) это сработает, но это не то, чего я пытаюсь достичь.

Мне нужно, чтобы это работало в функции, но для меня это не имеет смысла, когда я вызываю функцию с подходящими аргументами, она не будет отображаться. Но если бы я сделал проверку внутри своей функции, это сработало бы. Следовательно, теряется смысл использования функции.


РЕШЕНО

Проблема заключалась в том, что мой $item1 $item2 $item3... не будет использоваться в области видимости, не знаю почему, но в этом была проблема. Вызов сеансов внутри моей функции решил эту проблему. Спасибо за помощь!

$arr = array($item1, $item2, $item3, $item4, $item5); все элементы, кроме элемента 1, не входят в область действия функции.
splash58 03.02.2019 16:11

Не уверен, что понимаю проблему. Но я не понимаю, почему вы извлекаете свои элементы из массива

Andreas 03.02.2019 16:12
Стоит ли изучать 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 и хотите разрабатывать...
0
2
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

почему бы вам не использовать $arr вне функции и использовать ее в качестве аргумента.

$arr = array($item1, $item2, $item3, $item4, $item5);
  function ValidateCart($item, $itemname, $itemsize, $itemprice, $itemurl, $arr)
  {

      if (in_array($item, $arr)) {
        echo '<br><hr>';
        echo $_SESSION[$itemname]; echo '<br>';
        echo $_SESSION[$itemsize]; echo '<br>';
        echo '€ '; echo $_SESSION[$itemprice]; echo '<br><br>';
        $itemurl1 = $_SESSION[$itemurl];
        $itemurl2 = str_replace('url(', 'http://vintagefairytale.esy.es/', $itemurl1);
        $itemurl3 = str_replace(')', '', $itemurl2);

        echo '<img src='; echo $itemurl3; echo '></img>';
        echo '<hr>';
      }
  }

Я взял это вне функции, но не помогает. Но да, лучше воздержаться.

gauthier cremers 03.02.2019 16:17

вы говорите, что когда вы меняете $item на $item1, он работает, потому что $item не соответствует массиву, поэтому он не работает, дважды проверьте сценарий, который вы делаете

Muhammad Hamza Younas 03.02.2019 16:21
function ValidateCart($item, $itemname, $itemsize, $itemprice, $itemurl) {
    $arr = array($_SESSION['item1'], $_SESSION['item2'], $_SESSION['item3'], $_SESSION['item4'], $_SESSION['item5']);
    if (in_array($item, $arr)) {
        echo '<br><hr>';
        echo $_SESSION[$itemname]; echo '<br>';
        echo $_SESSION[$itemsize]; echo '<br>';
        echo '€ '; echo $_SESSION[$itemprice]; echo '<br><br>';
        $itemurl1 = $_SESSION[$itemurl];
        $itemurl2 = str_replace('url(', 'http://vintagefairytale.esy.es/', $itemurl1);
        $itemurl3 = str_replace(')', '', $itemurl2);

        echo '<img src='; echo $itemurl3; echo '></img>';
        echo '<hr>';
      }
  }

Ваш $item1 и т. д. выходят за рамки функции.

Ага, это было. Большое спасибо. Однако вопрос: почему моя функция не может получить $item1 $item2.... как это объявлено выше + вне функции? В любом случае спасибо за решение!

gauthier cremers 03.02.2019 16:37

$_SESSION является суперглобальным в PHP: php.net/manual/de/language.variables.superglobals.php Их можно найти везде. Другие переменные должны быть введены в функцию в качестве параметра.

nologin 03.02.2019 17:31

Если вы работаете с классами, вы можете получить доступ к переменным, которые не входят в область вашей функции, с помощью $this->item1

nologin 03.02.2019 17:44

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