【问题标题】:PHP reading my array of my shopping cart correctly?PHP 正确读取我的购物车数组?
【发布时间】:2019-02-03 15:06:44
【问题描述】:

我正在创建一个新手网上商店,但遇到了一个问题。我编写了一个函数来简单地绘制一个已定义的项目。 (因此,只有当商品实际添加到我的购物车时,它才会绘制带有描述的图像)。

注意,这显然不是最好的方法。但它应该可以工作。

设置我的项目。只有在开始时实际定义它们时才会起作用。

      $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)) 它会起作用,但这不是我想要实现的目标。

我需要它在函数中工作,但对我来说,当我使用 fit 参数调用函数时它没有意义,它不会显示。但是,如果我在我的函数中进行检查,它就可以工作。因此失去了使用函数的意义。


已解决

问题是我的 $item1 $item2 $item3... 不会在范围内使用,不知道为什么,但这就是问题所在。在我的函数中调用会话已经解决了它。感谢您的帮助!

【问题讨论】:

  • $arr = array($item1, $item2, $item3, $item4, $item5); 除 item1 外的所有项目都超出了函数范围。
  • 不确定我是否理解问题所在。但我不明白你为什么从数组中提取你的项目

标签: php arrays webshop


【解决方案1】:

为什么不在函数外部使用 $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>';
      }
  }

【讨论】:

  • 我把它带到了函数之外,但没有帮助。但是最好还是把它挡在外面。
  • 您是说,当您将 $item 更改为 $item1 时,它可以工作,因为 $item 与数组不匹配,这就是它不工作的原因,请仔细检查您正在执行的场景
【解决方案2】:
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.... 因为它在函数之外的 + 上方声明?无论如何感谢您的解决!
  • $_SESSION 是 PHP 中的一个超级全局变量:php.net/manual/de/language.variables.superglobals.php 它们随处可见。其他变量必须作为参数注入到函数中。
  • 如果您使用类,您可以使用 $this->item1 访问不在函数范围内的变量
猜你喜欢
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
  • 2014-04-03
  • 2017-06-25
相关资源
最近更新 更多