如何在PHP中合并或组合数组?

4

我有一个 PHP 多维数组(如下)。


Array
(
    [0] => Array
        (
            [2] => one@example.com
        )

    [1] => Array
        (
            [4] => two@example.com
        )

    [2] => Array
        (
            [3908] => twenty@example.com
        )

    [3] => Array
        (
            [2548] => eleven@example.com
        )

    [4] => Array
        (
            [3099] => ten@example.com
        )

    [5] => Array
        (
            [5283] => six@example.com
        )

)

我想知道如何使用PHP进行合并或组合,或者像下面这样简单地完成。


Array
(
    [2] => one@example.com
    [4] => two@example.com
    [3908] => twenty@example.com
    [2548] => eleven@example.com
    [3099]  => ten@example.com
    [5283]  => six@example.com
)

帮助

3个回答

3
你可以通过call_user_func_array()将第二级元素“提升”到第一级元素。而array_merge()会重新索引数组,array_replace()则不会,但会保留原始键名,这使得它成为一个一行代码的解决方案:
$a = call_user_func_array('array_replace', $a);

测试:

<?php
$a = array (
  array (2 => 'one@example.com'),
  array (4 => 'two@example.com'),
  array (3908 => 'twenty@example.com'),
  array (2548 => 'eleven@example.com'),
  array (3099 => 'ten@example.com'),
  array (5283 => 'six@example.com'),
);
$a = call_user_func_array('array_replace', $a);
var_dump($a);

这个方法很管用,但需要注意的是,array_replace()只存在于PHP 5.3.0 (20090630)版本之后。 - scronide

0

只需遍历数组并存储到另一个数组中即可。

$a = array( 0 => array(1) , 1=> array(3) );
$another=array();
foreach ($a as $k=>$v){    
    foreach ($v as $y=>$z){
        $another[$k]=$z;
    }    
}
print_r($another);

这样做非常慢,时间复杂度为O(n^2)。你可以简单地连接数组,这将保留键和值。 - dreadwail
你不能依赖于array_push来管理键值,你需要用$another[$y] = $z来替代它。 - scronide
1
我觉得不应该对这个答案进行负评,虽然它可能不够优雅,但通过纠正错误表明了思考的过程。尽管它不是最优雅的解决方案,但确实能够完成任务。我支持将其从-1提升到0。 - dreadwail

-1

这个怎么样?


foreach( $old_arr as $old )
{
    $key = key( $old[0] );
    $new[ $key ] = $old[0][$key];
}

编辑:没关系,我没有意识到之前的答案已经被更正了。


这样做不行,因为它假设子数组的值以0为键,而在示例中没有一个是这样的。 - scronide

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接