【问题标题】:Creating a foreach loop创建一个 foreach 循环
【发布时间】:2013-11-17 19:02:23
【问题描述】:

我目前正在为一个网站创建一个购物篮,但目前只有在我回应我拥有的每件产品以及该产品当前在购物篮中的数量以及其他产品时,我才能让它工作。在数据库中,但它不显示数字。我正在尝试创建一个 foreach 循环,然后为篮子中的每个项目而不是我的所有产品回显结果。以下是我的代码以及它在我的网站上的外观。我尝试创建 foreach 循环的所有努力似乎都导致 foreach 循环导致整个脚本失败。对此问题的任何帮助将不胜感激!

    if ($_GET[action]=="add") {
        $id=$_GET['radio_id'];
        $_SESSION['basket'.$id]++;

            echo "You currently have $_SESSION[basket1] Grundig G3 in your basket<br />";
            echo "You currently have $_SESSION[basket2] Eton E5 in your basket<br />";
            echo "You currently have $_SESSION[basket3] Eton E1 G3 in your basket<br />";
            echo "You currently have $_SESSION[basket4] Morphy Richards DRM Radio G3 in your basket<br />";
            echo "You currently have $_SESSION[basket5] TechniSat MultyRadio in your basket<br />";
            echo "You currently have $_SESSION[basket6] Sony ICF-SW7600GR in your basket<br />";
            echo "You currently have $_SESSION[basket7] Sony AN-LP1 in your basket<br />";
         }
    else    {
            echo "You have no items in your shopping cart.";
            }

网站显示这一点,当我添加一个项目时,它会显示一个数字或增加一个数字,具体取决于我添加到购物篮的项目。

您目前有 2 个 Grundig G3 在您的购物篮中

您目前有 1 个 Eton E5 在您的购物篮中

您的购物篮中目前有 Eton E1 G3

您的购物篮中目前有 Morphy Richards DRM Radio G3

您的购物篮中目前有 TechniSat MultyRadio

您的购物篮中目前有 Sony ICF-SW7600GR

您的购物篮中目前有 Sony AN-LP1


    $result = mysqli_query($link, "SELECT * FROM radios WHERE radio_id=".$_GET[radio_id]) or die( mysqli_error($link));
    $array = mysqli_fetch_array($result);

    if ($_GET[action]=="add") {
    $id=$_GET['radio_id'];
    $_SESSION['basket'.$id]++;
        $manufacturer=$array['manufacturer'];

    foreach($_SESSION as $id => $amount){   

        if(strstr($id,'basket')){
             echo "You have $amount $manufacturer in your basket.<br>";
        }
        }

@vascowhite

【问题讨论】:

  • @h2ooooooo:不,这是不正确的。它will 展开。
  • 是的,它确实扩展了。我的问题不在于这段代码本身,而是调整这段代码以创建一个 foreach 循环,而不是仅仅回显每个循环。
  • @AmalMurali 哇哦 - 它不仅会扩展,而且如果您将键用作常量,它会扩展?

标签: php if-statement foreach


【解决方案1】:

您正在寻找foreach() loop,类似于:-

$_SESSION['basket1'] = 2;
$_SESSION['basket2'] = 4;
$_SESSION['basket3'] = 10;
$_SESSION['someothervalue'] = 'test';

var_dump($_SESSION);

显然以上所有只是测试代码。 foreach($_SESSION as $key => $amount){

    if(strstr($key, 'basket')){
        echo "You have $amount whatevers in your basket.<br>" . PHP_EOL;
    }
}

输出:-

array (size=4)
  'basket1' => int 2
  'basket2' => int 4
  'basket3' => int 10
  'someothervalue' => string 'test' (length=4)
You have 2 whatevers in your basket.
You have 4 whatevers in your basket.
You have 10 whatevers in your basket.

【讨论】:

  • 我已经实现了您的代码,但是我现在在显示单个属性(例如产品名称)时遇到问题。 if ($_GET[action]=="add") { $id=$_GET['radio_id']; $_SESSION['篮子'.$id]++; foreach($_SESSION as $id => $amount){ if(strstr($id,'basket')){ echo "你的购物篮里有 $amount $array[manufacturer]。
    " . PHP_EOL;这就是我现在使用的代码,我只是想知道是否有一种方法可以显示单个项目的属性,而不是所有项目都显示相同的属性。 @vascowhite
  • 制造商信息是否存储在$_SESSION中?如果您可以将 var_dump($_SESSION) 的结果编辑到您的问题中,它将帮助我回答。
  • 没有制造商信息存储在数组中,但我在将制造商与正确的 id 链接时遇到问题。
  • 不,不要那样做,这不是答案,而是您问题的一部分。 FFS!
  • 你显然不明白你在做什么,你需要学习如何编程。我不能教你,所以很抱歉,但我已经帮不上忙了。
【解决方案2】:

如果没有别的,写的代码:

$_SESSION[basket1]

索引周围没有括号,因此它会尝试将那个 basket1 呈现为一个常量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-14
    • 2011-10-22
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2014-09-06
    相关资源
    最近更新 更多