是否可以提交没有序列号的数组?

时间:2018-05-09 02:25:46

标签: php arrays laravel

我看到一些网站提交的数据如下:

<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" => "",
    )
)

1 个答案:

答案 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);