【问题标题】:Array_values from multidimensional array来自多维数组的 Array_values
【发布时间】:2012-03-14 00:03:17
【问题描述】:

数组看起来像

$arr = array(

  array('a', 'b'),
  array('c', 'd'),
  array('e', 'f'),

)

我想从第一列获取一个包含值的数组,例如array('a', 'c', 'e')

我知道这可以通过迭代数组并将值存储在另一个数组中轻松完成,但是有没有更短的方法,内置 PHP 函数或其他什么?

【问题讨论】:

  • array_values() 会给你数组中的元素,我认为没有帮助
  • 不,get_first_entry_from_all_sub_arrays() 不是内置的。您必须以一种或另一种方式循环。

标签: php arrays


【解决方案1】:

从 PHP 5.5 开始,您可以使用 array_column():

$records = array(
    array(
        'id' => 2135,
        'first_name' => 'John',
        'last_name' => 'Doe'
    ),
    array(
        'id' => 3245,
        'first_name' => 'Sally',
        'last_name' => 'Smith'
    ),
    array(
        'id' => 5342,
        'first_name' => 'Jane',
        'last_name' => 'Jones'
    ),
    array(
        'id' => 5623,
        'first_name' => 'Peter',
        'last_name' => 'Doe'
    )
);

$lastNames = array_column($records, 'last_name', 'id');

print_r($lastNames);

Array
(
    [2135] => Doe
    [3245] => Smith
    [5342] => Jones
    [5623] => Doe
)

【讨论】:

    【解决方案2】:
    $arr = array(
    
      array('a', 'b'),
      array('c', 'd'),
      array('e', 'f'),
    
    );
    
    // You can make it look concise using array_map :)
    $arr = array_map(function($x){ return $x[0]; }, $arr);
    
    // $arr = array('a', 'c', 'e');
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      $foo = array_map('reset', $arr);
      

      任何阅读您的代码的人都需要知道重置的副作用是返回数组中的第一个值。这可能更具可读性,也可能不再具有可读性——如果数组没有索引为零的条目,它的缺点是无法工作:

      $baz = array_map(function ($a) { return $a[0]; }, $arr);
      

      如果您想非常清楚并且不介意放置一个函数:

      function array_first($a) {
          return reset($a);
      }
      
      $baz = array_map('array_first', $arr);
      

      【讨论】:

      • reset 返回 first 元素,而不是 0 索引的元素。无论哪种方式都可以。
      • 我丢失了字符串键,它被整数替换,这有助于扁平化数组索引,而不是字符串键索引
      【解决方案4】:

      不,你不能不使用任何循环来做到这一点......

      为此,只需使用循环并将值存储在新数组中或使用回调函数来获取您的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-05
        • 1970-01-01
        • 2018-02-11
        • 2014-11-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多