将内部数组值移动到父数组,重置键并将键名更改为字符串

时间:2014-06-24 18:23:53

标签: php arrays key

我有一个数组:

[0] => Array
    (
        [0] => 1
        [1] => 30
        [2] => 33
    )

[1] => Array
    (
        [id] => 5
    )

我想将[0]索引中的所有值移出,以便它们成为父数组的一部分。所以最终的结果将是这样的:

[0] => Array
(
    [id] => 1
)

[1] => Array
(
    [id] => 30
)

[2] => Array
(
    [id] => 33
)

[3] => Array
(
    [id] => 5
)

正如您所见,[0]上的数字索引现已更改为id 我尝试过使用array_map('current', $array[0]) 没有用,有什么建议吗?

5 个答案:

答案 0 :(得分:4)

您可以使用ol'trusty double foreach

$new_array = array();

foreach ($array as $arr) {
    foreach ($arr as $ar) {
        $new_array[] = array('id'=>$ar);
    }
}

Demo

答案 1 :(得分:3)

$data = array(
    array(1, 30, 33),
    array('id' => 5)
);

$result = array();
array_walk_recursive(
    $data,
    function($value) use (&$result) {
        $result[] = array('id' => $value);
    }
);

var_dump($result);

答案 2 :(得分:1)

只是为了表明迭代器也是非常有用的工具:

$data = array(
    array(1, 30, 33),
    array('id' => 5)
);

$result = array();
foreach (new RecursiveIteratorIterator(
             new RecursiveArrayIterator($data),
             RecursiveIteratorIterator::LEAVES_ONLY
         ) as $value) {
    $result[] = array('id' => $value);
}
var_dump($result);

答案 3 :(得分:0)

$array = [
    [1, 30, 33],
    ['id' => 5]
];

$result = array_reduce($array, function (array $result, array $array) {
    return array_merge($result, array_map(
        function ($id) { return compact('id'); },
        array_values($array)
    ));
}, []);

var_dump($result);

不可否认,这不是解决这个问题的最简单方法,而是非常“功能性”。 ;)

答案 4 :(得分:0)

$array = array(
    array(0 => 1,1 => 30,2 => 33,),
    array("id" => 5,)
);

$result = array_merge(
    array_map('array_flip', 
        array_chunk(
            array_fill_keys($array[0], "id"),
            1, true)
        ), 
    array_slice($array, 1)
);

var_export($result);

结果:

array ( 
    array ( 'id' => 1 ), 
    array ( 'id' => 30 ), 
    array ( 'id' => 33 ), 
    array ( 'id' => 5 ) 
)
相关问题