我如何从key =>数组中选择? “数组值”到php中“key =>值”数组的数组

时间:2014-12-09 01:30:28

标签: php arrays laravel

哈,我不知道怎么说出来。我正在尝试将由表单字段输入生成的一组三个数组重新格式化为更好地匹配我的模型的内容,因此我可以将值保存到数据库中。

不确定解决方案是否应该是某些数组操作,或者我应该更改表单字段中的“name”属性。

目前我有一个输入数据数组:

array(
  'image_id' => 
    array
      0 => '454' (length=3),
      1 => '455' (length=3),
      2 => '456' (length=3)
  'title' => 
    array
      0 => 'title1' (length=6),
      1 => 'title2' (length=0),
      2 => '' (length=6)
  'caption' => 
    array
      0 => 'caption1' (length=8),
      1 => '' (length=8),
      2 => 'caption3' (length=8)
);

并希望将其更改为类似的内容,因此我可以迭代并将每个值数组保存到我的数据库中的相应资源。

array(
    0 =>
        array
        'image_id'  => '454',
        'title'     => 'title1',
        'caption'   => 'caption1'
    1 =>
        array
        'image_id'  => '455',
        'title'     => 'title2',
        'caption'   => ''
    2 =>
        array
        'image_id'  => '456',
        'title'     => '',
        'caption'   => 'caption3'
);

2 个答案:

答案 0 :(得分:1)

这样做:

$array = call_user_func_array('array_map', array_merge(
    [function () use ($array) { return array_combine(array_keys($array), func_get_args()); }],
    $array
));

假设此数据最初来自HTML表单,您可以在那里修复数据:

<input name="data[0][image_id]">
<input name="data[0][title]">
<input name="data[0][caption]">

<input name="data[1][image_id]">
<input name="data[1][title]">
<input name="data[1][caption]">

然后它将以正确的格式到达您的服务器。

答案 1 :(得分:1)

这将使用2个foreach循环遍历数组。他们会使用彼此的键来构造新数组,因此它可以在任何情况下工作:

$data = array(
    'image_id' => array(454, 455, 456),
    'title' => array('title1', 'title2', ''),
    'caption' => array('caption1', '', 'caption3')
);

$result = array();
foreach($data as $key => $value) {
    foreach ($value as $k => $v) {
        $result[$k][$key] = $v;
    }
}