【问题标题】:Get column values from an associative array in php从php中的关联数组中获取列值
【发布时间】:2014-08-12 17:55:51
【问题描述】:

我有一个表单数组:

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

我想要这样的输出:

编辑:

 Array
    ( array('first_Name' => John),
      array('first_Name'=> Sally),
      array('first_Name'=> Jane),  
      array('first_Name'=> Peter)
    );

这可以实现吗??

【问题讨论】:

  • 如何将first_name作为数组的多重索引?
  • 具有相同的键,这是不可能的
  • 关联数组不能保存相同的索引键

标签: php associative-array


【解决方案1】:

您不能这样做,因为数组中不能有重复的键。

这是一个相关的问题:How to allow duplicate keys in a PHP array?

本文解释了 PHP 如何在内部存储数组:http://nikic.github.io/2012/03/28/Understanding-PHPs-internal-array-implementation.html

编辑后回答:

$arr = array();
foreach($records as $value) {
    $arr[] = array('first_name' => $value['first_name']);
}
print_r($arr);

【讨论】:

  • +1。或者只是:array_walk($records, function ($v, $k) use (&$arr) { $arr[] = ['first_name' => $v['first_name']]; });
  • 这与 nl-x 的答案有何不同?添加到您在 nl-x 发布他的答案后编辑了您的帖子
  • @asprin 可能我的打字速度比 nl-x 慢。当我打字时,他回答了。
  • @asprin:这并不是说有上千种不同的方法可以实现这一点:-)
  • @asprin 为了你的幸福。现在不同了。
【解决方案2】:

您可以像这样解决您的(已编辑)问题:

$new_array = array();
foreach($records as $record)
    $new_array[] = array('first_Name'=>$records['first_name']);

【讨论】:

    【解决方案3】:

    试试这个

    $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',
        )
    );
    
    $tmp = array('first_name' => '');
    foreach ($records as &$record) {
        $record = array_intersect_key($record, $tmp);
        // or $record = array('first_name' => $record['first_name']);
    }
    unset($record);
    
    var_dump($records);
    

    【讨论】:

      【解决方案4】:

      如果要在数组中用数组表示,肯定会用索引键生成,像这样

       Array
          ( '0' => array('first_Name' => John),
            '1' => array('first_Name'=> Sally),
            '2' => array('first_Name'=> Jane),  
            '3' => array('first_Name'=> Peter)
          );
      

      试试这个,

       foreach($records as $record) {
          $name_array[] = Array('first_Name' =>$record['first_name']);
       }
       print_r($name_array);
      

      您的输出将是,

      Array
      (
          [0] => Array
              (
                  [first_Name] => John
              )
      
          [1] => Array
              (
                  [first_Name] => Sally
              )
      
          [2] => Array
              (
                  [first_Name] => Jane
              )
      
          [3] => Array
              (
                  [first_Name] => Peter
              )
      
      )
      

      【讨论】:

      • 这与this answerthis one 相同。不确定再找一个内容相同的人是否会有所帮助。
      【解决方案5】:

      你可以试试这个

      $arr_output = array();
      foreach($records as $key=>$arr)
      {
          $arr_output['id'][] = $arr['id'];
          $arr_output['first_name'][] = $arr['first_name'];
          $arr_output['last_name'][] = $arr['last_name'];
      }
      
      print_r($arr_output['first_name']); // display all first names
      print_r($arr_output); // display complete output array.
      

      输出:

      Array
      (
          [id] => Array
              (
                  [0] => 2135
                  [1] => 3245
                  [2] => 5342
                  [3] => 5623
              )
      
          [first_name] => Array
              (
                  [0] => John
                  [1] => Sally
                  [2] => Jane
                  [3] => Peter
              )
      
          [last_name] => Array
              (
                  [0] => Doe
                  [1] => Smith
                  [2] => Jones
                  [3] => Doe
              )
      
      ) 
      

      Demo

      【讨论】:

      • 这不是 OP 所要求的
      • @user2129794 正如我评论你的问题一样,数组中不可能有相同的键。您可以按照我的回答使用它。
      【解决方案6】:

      这是不可能的,因为在关联数组中不能有同一个键的多个元素。

      【讨论】:

      • 认真的吗?这构成了一个答案?
      • @nl-x 和 Amal _ 我并不是说答案是错误的。我指的是一个句子作为答案发布。它很可能已作为评论发布
      • @asprin :我知道你是这个意思。那么,为什么不呢?
      • @asprin :根据您的链接,这是一个答案。 (请参阅您的链接中的#8)它说它应该是一个答案,并且不应该被报告为 NaA(不是一个答案)
      【解决方案7】:

      要获得所需的输出,您可以使用 array_map,尽管您可以使用 PHP 5.5 中的新功能 array_column 获得类似的输出。

      array_map (http://3v4l.org/v8Y8Z):

      <?php
      
      $firstNames = array_map(function($record) {
          return ['first_name' => $record['first_name']];
      }, $records);
      

      array_column (http://3v4l.org/ohnGu):

      $firstNames = array_column($records, 'first_name');
      

      注意:array_column 不会使用 first_name 键创建子数组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-07
        • 1970-01-01
        • 2021-03-16
        • 2016-08-04
        • 1970-01-01
        • 2015-08-05
        • 1970-01-01
        相关资源
        最近更新 更多