Php 修复多维foo[a][[b]数组输入

Php 修复多维foo[a][[b]数组输入,php,Php,我在html中使用多维输入标记: Car 1 <input name="warehouse[cars][][name]" /> <input name="warehouse[cars][][model]" /> <input name="warehouse[cars][][year]" /> Car 2 <input name="warehouse[cars][][name]" /> <input name="warehouse[cars]

我在html中使用多维输入标记:

Car 1
<input name="warehouse[cars][][name]" />
<input name="warehouse[cars][][model]" />
<input name="warehouse[cars][][year]" />

Car 2
<input name="warehouse[cars][][name]" />
<input name="warehouse[cars][][model]" />
<input name="warehouse[cars][][year]" />
正如您所见,它是完全分离的,而不是类似于:

$warehouse['cars'] = array(
 [0] => array(
     'name' => 'Audi',
     'model' => 'S4',
     'year' => '2010'
   )
 ....
)
如何修复/重新分组此类数组输入


另外,我知道我可以做
warehouse[cars][number here][name]
,但我不想做。

与其让PHP为您挑选数组键,只需明确指定它们:

Car 1
<input name="warehouse[cars][1][name]" />
<input name="warehouse[cars][1][model]" />

Car 2
<input name="warehouse[cars][2][name]" />
<input name="warehouse[cars][2][model]" />
car1
汽车2

您可能想尝试以下方法:

$cars = array(
  'car1', 
  'car2'
);

foreach($cars as $key => $car) {
  echo $car;
  echo '<input name="warehouse[cars]['.$key.'][name]" />';
  echo '<input name="warehouse[cars]['.$key.'][model]" />';
  echo '<input name="warehouse[cars]['.$key.'][year]" />';
}
$cars=数组(
“car1”,
“car2”
);
foreach($key=>$car的车辆){
echo$car;
回声';
回声';
回声';
}

您可以迭代列表并重新组合条目:

foreach ($_INPUT["warehouse"]["cars"] as $cars) {

    list($key, $value) = each($cars);
    $block[$key] = $value;

    if ($key == "year") {
        $result_list[] = $block;
        $block = array();
    }
}

这就要求所有条目都必须有
年份

我建议您降低数组的复杂度,以便以后可以轻松调试代码。您可以使用
汽车名称[]
汽车型号[]
等,而不是
仓库[cars][[name]

所以当你读这些值的时候,你可以用这样的东西

$j=0;
if(count($_POST['cars_names'])) foreach($_POST['cars_names'] as $car){
    $name = $car;
    $model= $_POST['cars_models'][$j];
    ...
    $j++;
}

好吧,我认为你运气不好。@JaredFarrish你说的“你运气不好”是什么意思?你得到的是如何工作的。我以前也遇到过同样的问题,必须使用数字索引或键值。@ryan,因为您使用的是cars][[name]空[]将为每个输入创建一个新的数组键,从而分隔数组。因此,您需要使用键来获取要创建的阵列设置。这就是jared在他的“运气不佳”评论中所指的内容。
Array:warehouse->cars(
示例肯定不是你所得到的。在标准php数组中不可能有重复的数组键。在问题的最后,@Ryan表示他知道这一点。他试图不这样做。是的,但OP想要的是不可能的。
$j=0;
if(count($_POST['cars_names'])) foreach($_POST['cars_names'] as $car){
    $name = $car;
    $model= $_POST['cars_models'][$j];
    ...
    $j++;
}