php5.5新数组函数array_column

东坡下载 2013年07月09日 20:11:05

      PHP5.5发布了,其中增加了一个新的数组函数array_column,感觉不错的!但是低版本PHP要使用,得自己实现:
      参考地址:https://wiki.php.net/rfc/array_column

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      79
      80
      81
      82
      83
      84
      85
      86
      87
      88
      89
      90
      91
      92
      93
      94
      95
      96
      97
      98
      99
      100
      101
      102
      103
      104
      105
      106
      if(!function_exists('array_column')){
      function array_column($input, $columnKey, $indexKey=null){
      $columnKeyIsNumber      = (is_numeric($columnKey)) ? true : false;
      $indexKeyIsNull         = (is_null($indexKey)) ? true : false;
      $indexKeyIsNumber       = (is_numeric($indexKey)) ? true : false;
      $result                 = array();
      foreach((array)$input as $key=>$row){
      if($columnKeyIsNumber){
      $tmp            = array_slice($row, $columnKey, 1);
      $tmp            = (is_array($tmp) && !empty($tmp)) ? current($tmp) : null;
      }else{
      $tmp            = isset($row[$columnKey]) ? $row[$columnKey] : null;
      }
      if(!$indexKeyIsNull){
      if($indexKeyIsNumber){
      $key        = array_slice($row, $indexKey, 1);
      $key        = (is_array($key) && !empty($key)) ? current($key) : null;
      $key        = is_null($key) ? 0 : $key;
      }else{
      $key        = isset($row[$indexKey]) ? $row[$indexKey] : 0;
      }
      }
      $result[$key]       = $tmp;
      }
      return $result;
      }
      }
      // 使用例子
      $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'
      )
      );
      $firstNames = array_column($records, 'first_name');
      print_r($firstNames);
      /*
      Array
      (
      [0] => John
      [1] => Sally
      [2] => Jane
      [3] => Peter
      )
      */
      $records = array(
      array(1, 'John', 'Doe'),
      array(2, 'Sally', 'Smith'),
      array(3, 'Jane', 'Jones')
      );
      $lastNames = array_column($records, 2);
      print_r($lastNames);
      /*
      Array
      (
      [0] => Doe
      [1] => Smith
      [2] => Jones
      )
      */
      $mismatchedColumns = array(
      array(
      'a' => 'foo',
      'b' => 'bar',
      'e' => 'baz'
      ),
      array(
      'a' => 'qux',
      'c' => 'quux',
      'd' => 'corge'
      ),
      array(
      'a' => 'grault',
      'b' => 'garply',
      'e' => 'waldo'
      ),
      );
      $foo = array_column($mismatchedColumns, 'a', 'b');
      print_r($foo);
      /*
      Array
      (
      [bar] => foo
      [0] => qux
      [garply] => grault
      )
      */