【问题标题】:Merge or combine an array like this? on PHP合并或组合这样的数组?关于 PHP
【发布时间】:2023-03-08 12:45:01
【问题描述】:

我有这个多维 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(below)这样做。


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
)

帮助

【问题讨论】:

    标签: php arrays multidimensional-array


    【解决方案1】:

    您可以通过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) 之后才存在。
    【解决方案2】:

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

    $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);
    

    【讨论】:

    • 这太慢了,而且是 n^2 的大 O。您可以简单地连接数组,这将保留键和值。
    • 您丢失了依赖于 array_push 的密钥。你必须用 $another[$y] = $z 代替它。
    • 我不认为对这个答案投反对票是不公平的,尽管它可能并不优雅,但正如更正所证明的那样,这个想法就在那里。尽管它不是最优雅的,但它确实可以完成这项工作。我 +1 将它从 -1 带到 0。
    【解决方案3】:

    这个怎么样?

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

    编辑:没关系没有意识到以前的答案已得到纠正。

    【讨论】:

    • 这行不通,因为它假定子数组值的键值为 0,而示例中的值都不是。
    猜你喜欢
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多