【问题标题】:Multiple arrays using same foreach使用相同 foreach 的多个数组
【发布时间】:2014-08-29 02:36:50
【问题描述】:

让我们从表格布局开始,如下所示:

Item No.          [Store 1]      [Store 2]    [Store 3]
[   x1   ]         [  3   ]       [  2   ]     [  5   ]
[   x2   ]         [  0   ]       [  5   ]     [  1   ]

请注意此[ ] 表示为输入文本字段。

现在每个文本字段都有一个名称设置为array

$n= array();
$item = array();
$s = array();

货品编号

echo "<input type='text' value='".$row['item_no']."' name='item[]' readonly='readonly' />";

存储 1 ,2 和 3

echo "<input type='text' value='".$row['short']."' name='s[]' readonly='readonly' />";

每个商店下方的字段

echo "<input type='text' value='' name='n[]' />";

我希望它清楚,如您所见,找到了 3 个arrays。现在,当我将此表单提交到下一页时...

if(isset($_POST['n']) && isset($_POST['s']) && isset($_POST['item'])){
if(is_array($_POST['n']) && is_array($_POST['s']) && is_array($_POST['item'])) {


foreach( $_POST['n'] as $index => $nqty) {
echo 'QTY = '.$nqty . ' STORE = ' . $_POST['s'][$index]."<br />"; 
//End of Foreach loop
}

}}

上面代码的输出如下所示:

QTY = 3 STORE = store 1
QTY = 2 STORE = store 2
QTY = 5 STORE = store 3
QTY = 0 STORE = store 1
QTY = 5 STORE = store 2
QTY = 1 STORE = store 3

我现在想要的只是我应该如何或在哪里放置项目编号。上面代码中的数组..换句话说,我希望输出完全像这样:

QTY = 3 STORE = store 1 Item No. = x1
QTY = 2 STORE = store 2 Item No. = x1
QTY = 5 STORE = store 3 Item No. = x1
QTY = 0 STORE = store 1 Item No. = x2
QTY = 5 STORE = store 2 Item No. = x2
QTY = 1 STORE = store 3 Item No. = x2

有可能吗?如果不是,那么另一种方法是什么。

请帮忙,我完全被这个项目卡住了。




回复@user3702775

我已经测试了您的代码,更改了 s[][]n[][] 的名称,其中输出如下所示:

QTY = 3 STORE = store 1 Item No. - x1
QTY = 2 STORE = store 2 Item No. - x2 

它甚至错过了商店 3 和下一行。

存储 1 ,2 和 3

echo "<input type='text' value='".$row['short']."' name='s[][]' readonly='readonly' />";

每个商店下方的字段

echo "<input type='text' value='' name='n[][]' />";

foreach 代码:

foreach( $_POST['item'] as $key=>$value){
  foreach( $_POST['n'][$key] as $index => $nqty) {
    echo 'QTY = '.$nqty . ' STORE = ' . $_POST['s'][$key][$index]." Item No. - ".$value."<Br />"; 
    //End of Foreach loop
  }
}



已解决:

更改以下输入文本字段的名称,如下所示:

货品编号

echo "<input type='text' value='".$row['item_no']."' name='item[$j]' readonly='readonly' />";

存储 1 ,2 和 3

echo "<input type='text' value='".$row['short']."' name='s[$j][]' readonly='readonly' />";

每个商店下方的字段

echo "<input type='text' value='' name='n[$j][]' />";

然后在代码开头赋值$j=0;

并把$j++;放在最后

然后在提交页面:

foreach( $_POST['item'] as $key=>$value){

  foreach( $_POST['n'][$key] as $index => $nqty) {

    echo 'QTY = '.$nqty . ' STORE = ' . $_POST['s'][$key][$index]." Item No. - ".$value."<Br />"; 
    //End of Foreach loop
  }

}

感谢@user3702775

【问题讨论】:

    标签: php arrays forms foreach


    【解决方案1】:

    将您的 store 和 fields 数组设为 s[][] 和 n[][] 并为每个项目设置第一个索引。

    例如- 对于第一项,商店和字段名称将是 s[0][] 和 n[0][] 等等。

    然后在提交你的循环后会是这样的 -

    foreach( $_POST['item'] as $key=>$value){
      foreach( $_POST['n'][$key] as $index => $nqty) {
        echo 'QTY = '.$nqty . ' STORE = ' . $_POST['s'][$key][$index]." Item No. - ".$value."<br /> "; 
        //End of Foreach loop
      }
    }
    

    【讨论】:

    • 我已经编辑了朋友的帖子..感谢您的宝贵时间
    • 在回显您的文本字段时,您需要为每个项目设置第一个键,例如- echo "&lt;input type='text' value='".$row['short']."' name='s[0][]' readonly='readonly' /&gt;";
    • 我们越来越接近了,输出列出了所有数量,存储了正确的但当 echo $value 为它输出 Array 的项目时。我也查了它的名字item[0][]
    • 哦。不保留它作为 item[] 而已。
    • 不,如果我将其保留为item[],我将收到此错误Undefined offset: 1Warning: Invalid argument supplied for foreach() 但是我得到的echo 仅用于一个项目,即x1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    相关资源
    最近更新 更多