【问题标题】:for loop returns no value of GET variables on echo in phpfor循环在php中的echo上不返回GET变量的值
【发布时间】:2014-07-20 06:34:09
【问题描述】:

这是我的网址:

http://example.com/shop-login.php?itemCount=1&item_name_1=+product1&item_quantity_1=1&item_price_1=23.52&item_options_1=color%3A+Color%2C+pid%3A+5&Shipping_Option=EMS-Express

以下php命令:

echo $_GET['item_name_1'];

正确地给出了 product1 的值。

但是下面的代码在 for 循环中没有输出

$i = 1;
for ($i = 1; $i < $item_count; $i++) {
    $item_name_.$i = $_GET["item_name_".$i];
    echo $item_name_.$i .'<br />' ;
    $item_quantity_.$i = $_GET["item_quantity_".$i];
    echo $item_quantity_.$i .'<br />' ;
    $item_price_.$i = $_GET["item_price_".$i];
    echo $item_price_.$i .'<br />' ;
    $item_options_.$i = $_GET["item_options_".$i];
    echo $item_options_.$i .'<br />' ;
}

我想使用 $_GET[] 在 url 中获取 item_name_1、item_name_2 之类的值 ????

【问题讨论】:

  • $item_name_.$i = … 想做什么?
  • 你不能写像$item_name_.$i这样的变量
  • @Valentin Mercier 如果是这样,我将如何使用 $_GET[] 在 url 中获取变量,例如:item_name_1、item_name_2 等 ???
  • 考虑看看我的回答。

标签: php for-loop concatenation


【解决方案1】:

在处理编程任务时,您应该问自己什么是 适合您任务的最佳数据结构。在这种情况下,我相信数组更好 方法。 所以考虑使用多维数组items。

还要注意您的loop 条件是$i &lt; $item_count 在您的示例中 $item_count 将等于 1 并且 1 不小于 1。

$item_count = (int) $_GET['itemsCount'];
$i = 1;
$items = array();

for ($i = 1; $i <= $item_count; $i++) {
    $items[$i]['name'] = $_GET["item_name_".$i];
    echo $items[$i]['name'] .'<br />' ;
    $items[$i]['quantity'] = $_GET["item_quantity_".$i];
    echo $items[$i]['quantity'] .'<br />' ;
    $items[$i]['price'] = $_GET["item_price_".$i];
    echo $items[$i]['price'] .'<br />' ;
    $items[$i]['options'] = $_GET["item_options_".$i];
    echo $items[$i]['options'] .'<br />' ;
}

【讨论】:

  • 请注意我编辑了代码并更改了循环条件。
  • 如果你使用这种方法,你应该在 for 循环的第一行为$items[$i]初始化一个数组。
  • @sjagr ,据我所知你不需要在 PHP 中这样做。
  • 在这种情况下,如果单独分配每个元素而不是通过初始化程序,则可能需要使用 $items[$i] = array(); $item = &amp;items[$i]; 然后在循环体的其余部分使用 $item 以减少代码重复..每个项目[数组]的初始化也是相关的。
  • 不客气。如果对您有帮助,请考虑接受我的回答。
【解决方案2】:

使用${'item_name_'.$i} 代替$item_name_.$i。阅读更多variable variables here。

同时检查$item_count 的值。如果小于等于1,则不会执行for循环。

这是语法正确的代码:

$i = 1;
for ($i = 1; $i <= $item_count; $i++) {
    ${'item_name_'.$i} = $_GET["item_name_".$i];
    echo ${'item_name_'.$i} .'<br />' ;
    ${'item_quantity_'.$i} = $_GET["item_quantity_".$i];
    echo ${'item_quantity_'.$i} .'<br />' ;
    ${'item_price_'.$i} = $_GET["item_price_".$i];
    echo ${'item_price_'.$i} .'<br />' ;
    ${'item_options_'.$i} = $_GET["item_options_".$i];
    echo ${'item_options_'.$i} .'<br />' ;
}

您可能会发现在您正在使用的上下文中使用多维数组会更容易

$i = 1;
$items = array();
for ($i = 1; $i <= $item_count; $i++) {
    $items[$i] = array(
        'name' => $_GET['item_name_'.$i],
        'quantity' => $_GET['item_quantity_'.$i],
        'price' => $_GET['item_price_'.$i],
        'options' => $_GET['item_options_'.$i],
    );
    // Outputting statements here
}

【讨论】:

  • 请不要鼓励可变变量 - 唯一“正确”的代码是第二种形式,IMOHO:>
  • @user2864740 我不鼓励任何事情。我什至不鼓励 OP 使用 GET 变量的方式,但我正在用他们的代码解决问题,并为他们试图具体实现的目标提供正确的语法。
  • @sjagr 不幸的是没有输出??? print_r($items);也没有结果??
  • @user3790186 你忽略了我对$item_count 变量的警告。尝试我的编辑并将$i &lt; $itemcount 更改为$i &lt;= $itemcount
【解决方案3】:

使用类似下面的数组

$arr = array();
for ($i = 1; $i < $item_count; $i++) {
    if(isset($_GET["item_name_".$i]))
        $arr['item_name'][] = $_GET["item_name_".$i];
    if(isset($_GET["item_quantity_".$i]))
        $arr['item_quantity'][] = $_GET["item_quantity_".$i];
    if(isset($_GET["item_options_".$i]))
        $arr['item_options'][] = $_GET["item_options_".$i];
}
print_r($arr);

【讨论】:

    猜你喜欢
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多