Php 修复多维foo[a][[b]数组输入
我在html中使用多维输入标记: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]
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++;
}