我看到一些网站提交的数据如下:
<form method="POST" ...>
...
<input name="products[][title]>
<input name="products[][description]>
...
<input name="products[][title>
<input name="products[][description]>
...
</form>
我正在使用Laravel 5.5,我还没有找到解决方案。有没有办法合并到这种格式,还是我需要自己处理?
products:
array(
[0] => array(
"title" => "",
),
[1] => array(
"title" => "",
)
)
答案 0 :(得分:0)
包含
字段的表单<input name="products[][title]">
<input name="products[][description]">
...
<input name="products[][title]">
<input name="products[][description]">
将发送&#34;产品&#34;的发布数据以这种格式:
Array
(
[0] => Array
(
[title] => name1
)
[1] => Array
(
[description] => desc1
)
[2] => Array
(
[title] => name2
)
[3] => Array
(
[description] => desc2
)
)
使它看起来像这样:
Array
(
[0] => Array
(
[title] => name1
[description] => desc1
)
[1] => Array
(
[title] => name2
[description] => desc2
)
)
您需要在表单字段中添加索引:
<form method="POST" ...>
...
<input name="products[0][title]">
<input name="products[0][description]">
...
<input name="products[1][title]">
<input name="products[1][description]">
...
<input type="submit">
</form>
在第二种形式中,有不同的格式化数组的方法。例如:
如果你想只使用一个键子集的不同格式,你可以使用php native函数array_map( $callback , $source )
$result= array_map(function($item){
return ["title"=>$item["title"]];
}, $products);
print_r($result);
将导致:
$result=[
[
"title"=>"name1"
],
[
"title"=>"name2"
],
[
"title"=>"name3"
],
];
在&#34; Laravel&#34;方式,您可以使用集合:
$collection = collect($products);
$newCollection = $collection->map(function ($item, $key) {
return [ "title" => $item["title"] ];
});
$result= $newCollection->all();
结果将是相同的
没有像第一个例子那样处理具有未分组列的数组的常用方法。但是如果你想在不改变HTML代码的情况下从原始数组转换(不添加索引),你可以这样做:
$result=[];
foreach($products as $index=>$product){
foreach($product as $key=>$value){
$result[$index/2][$key]=$value;
}
}
print_r($result);
而且,如果你只想要一些键(例如标题):
$result=[];
foreach($products as $index=>$product){
$result[$index/2]["title"]=$product["title"];
}
print_r($result);