【问题标题】:How to flatten array in PHP?如何在 PHP 中展平数组?
【发布时间】:2014-05-21 11:04:30
【问题描述】:

我有一个包含 4 个数组的数组,每个数组有一个值。

array(4) {
  [0]=>
  array(1) {
    ["email"]=>
    string(19) "test01@testmail.com"
  }
  [1]=>
  array(1) {
    ["email"]=>
    string(19) "test02@testmail.com"
  }
  [2]=>
  array(1) {
    ["email"]=>
    string(19) "test03@testmail.com"
  }
  [3]=>
  array(1) {
    ["email"]=>
    string(19) "test04@testmail.com"
  }
}

扁平化数组以使其仅包含电子邮件地址作为值的最佳(=最短,首选原生 PHP 函数)方法是什么:

array(4) {
  [0]=>
  string(19) "test01@testmail.com"
  [1]=>
  string(19) "test02@testmail.com"
  [2]=>
  string(19) "test03@testmail.com"
  [3]=>
  string(19) "test04@testmail.com"
}

【问题讨论】:

    标签: php arrays function multidimensional-array flatten


    【解决方案1】:

    您可以使用 RecursiveArrayIterator 。这甚至可以使多嵌套数组变平。

    <?php
    $arr1=array(0=> array("email"=>"test01@testmail.com"),1=>array("email"=>"test02@testmail.com"),2=> array("email"=>"test03@testmail.com"),
        3=>array("email"=>"test04@testmail.com"));
    echo "<pre>";
    $iter = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr1));
    $new_arr = array();
    foreach($iter as $v) {
        $new_arr[]=$v;
    }
    print_r($new_arr);
    

    OUTPUT:

    Array
    (
        [0] => test01@testmail.com
        [1] => test02@testmail.com
        [2] => test03@testmail.com
        [3] => test04@testmail.com
    )
    

    【讨论】:

    • 也是不错的方法,但我更喜欢@moonwave99 的回答,因为它是一个精简的单线。
    • @GottliebNotschnabel,没问题。我建议将此作为通用解决方案,因为它甚至可以在多维数组上使用。
    【解决方案2】:

    在 PHP 5.5 中你有 array_column:

    $plucked = array_column($yourArray, 'email');
    

    否则,请使用array_map

    $plucked = array_map(function($item){ return $item['email'];}, $yourArray);
    

    【讨论】:

    • 或者如果你没有PHP 5.5,可以使用官方函数作者array_columngithub.com/ramsey/array_column的userland实现
    • 很好,正是我想要的。谢谢!
    猜你喜欢
    • 2021-12-21
    • 2021-11-15
    • 2011-02-11
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 2011-12-14
    相关资源
    最近更新 更多