Php复杂数组连接函数

时间:2015-10-14 10:56:40

标签: php arrays

我有以下数组,我需要将它组合为以下

之后的组合数组
Array(
   [common_name] => Array
    (
        [0] => 
        [1] => asd
        [2] => asdqerad
    )

[category] => Array
    (
        [0] => 
        [1] => Short Gun
        [2] => Air Rifle
    )

[type] => Array
    (
        [0] => 
        [1] => asd
        [2] => sd
    )

[model] => Array
    (
        [0] => 
        [1] => asd
        [2] => rfwasfd
    )

[calibre] => Array
    (
        [0] => 
        [1] => asd
        [2] => asd
    )

[barrel_lengh] => Array
    (
        [0] => 
        [1] => asd
        [2] => asdf
    )

) 我想将数组压缩成以下格式

array(
  array(common_name=>'',category=>'','type'='',model=>'',calibre=''..)
  array(common_name=>'asd',category=>'Short Gun','type=asd'',model=>asd'',calibre='asd'..)

)

请帮助我

3 个答案:

答案 0 :(得分:0)

您可以使用以下解决方案:

 function transpose($array) {
        array_unshift($array, null);
        return call_user_func_array('array_map', $array);
    }

这不是我自己的答案。检查此链接以获取原始答案 链接:Transposing multidimensional arrays in PHP

答案 1 :(得分:0)

你可以试试这个:

$arr = Array(
    'common_name' =>
    Array(
        0 => '',
        1 => 'asd',
        2 => 'asdqerad'
    ),
    'category' =>
    Array(
        0 => '',
        1 => 'Short Gun',
        2 => 'Air Rifle'
    ),
    'type' =>
    Array(
        0 => '',
        1 => 'asd',
        2 => 'sd'
    ),
    'model' =>
    Array(
        0 => '',
        1 => 'asd',
        2 => 'rfwasfd'
    ),
    'calibre' =>
    Array(
        0 => '',
        1 => 'asd',
        2 => 'asd'
    ),
    'barrel_lengh' =>
    Array(
        0 => '',
        1 => 'asd',
        2 => 'asdf'
    )
);
$len = count($arr['common_name']);
$i = 0;
for($i=0;$i<$len;$i++) {
    foreach ($arr as $key => $value) {
        $temp_arr [$key] = $value[$i];
    }
    $new_arr [] = $temp_arr;    
}

echo '<pre>',print_r($new_arr),'</pre>';

答案 2 :(得分:0)

您可以使用array_maparray_combinearray_keys来执行此操作

$keys = array_keys($arr);
$result = array_map(function($values)use($keys) {
    return array_combine($keys, $values);
}, array_map(null, $arr['common_name'], $arr['category'], $arr['type'], $arr['model'], $arr['calibre'], $arr['barrel_lengh']));
print_r($result);

Demo