PHP将foreach值发布到单独的数组

时间:2017-05-18 10:03:04

标签: php arrays forms select multidimensional-array

所以... 我有这个foreach循环,其中包含有关产品的信息,我想将信息保存到每个循环的单独数组中。

我在考虑做这样的事情:

$return_array = array();
foreach($items as $item) {
   $return_array[] = $item;
}

但我这样做有麻烦,因为我使用的是html的输入值,我需要在发送到数据库之前添加它们。

我的foreach就像:

foreach($items as $item) {
<table>
<tr>
<td>
<input value="<?= $item->name ?>" name="item<?= $item->id ?>">
</td>
</tr>
... more table tags
<?php foreach($item as $key) { ?>
  <input name ="item<?= $item->id ?>_label<?= $key->label ?> 
<?php } ?>
... more table tags
<select name="item<?= item->id ?>_status>
  //Choose the state the product is in
  <option value="damaged">
  <option value="good">
</select>

所以在用表格提交之后(这是一个顺便说一句)我得到这样的东西:

(取决于产品有多少标签可以增加)

$array = 
['item1'] = 'test';
['item1_label1'] = 123;
['item1_label2'] = 213; 
['item1_status'] = 'good';
['item2'] = 'test2';
['item2_label1'] = 112;
['item2_label2'] = 1232;
['item2_label3'] = 132;
['item2_status'] = 'broken';`

现在我想要的是:

$array = 
  ['item1'] = array[   //name of this doesn't matter
    ['item1'] = 'test'; // name
    ['item1_label1'] = 123; //label
    ['item1_label2'] = 213;  //label
    ['item1_status'] = 'good'; //status
  ],
  ['item2'] = array[
    ['item2'] = 'test2'; //name
    ['item2_label1'] = 112; //label
    ['item2_label2'] = 1232; //label
    ['item2_label3'] = 132; //label
    ['item2_status'] = 'broken' //status
  ]
];

我想从表单中创建此信息。 (也可以增加项目数量。)

1 个答案:

答案 0 :(得分:1)

试试这个,

$result = [];
foreach($array as $k  => $v)
{
  //$result[substr($k, 0, 5)][$k] = $v;
  if(strpos($k, '-') === FALSE)
    $result[$k][$k] = $v;
  else
    $result[substr($k, 0, strpos($k, '-'))][$k] = $v;
}