【问题标题】:PHP Store Key Value from Associative Array into Simple ArrayPHP将关联数组中的键值存储到简单数组中
【发布时间】:2014-01-11 19:34:15
【问题描述】:

我无法解决这个问题,任何帮助都会很棒...

我有一个结构如下的数组 $stores:

Array
(
[0] => Array
    (
        [id] => 123
        [name] => 'Store A'
    )

[1] => Array
    (
        [id] => 345
        [name] => 'Store B'
    )

[2] => Array
    (
        [id] => 567
        [name] => 'Store C'
    )

[3] => Array
    (
        [id] => 789
        [name] => 'Store D'
    )
)

我想从这个数组中提取“id”值到一个简单的数组中,如下所示:

$simple = array(123,345,567,789);

【问题讨论】:

    标签: php arrays associative-array


    【解决方案1】:

    如果您无法升级 php 版本,您可以简单地使用以下语法。在这种情况下,请使用if (!function_exists('array_column')) 以防止版本升级时可能发生的重新声明功能。

    来自 php.net 的说明

    array_column() 从数组的单个列返回值,由 column_key 标识。或者,您可以提供一个 index_key 来根据输入数组中 index_key 列中的值对返回数组中的值进行索引。

    /* Function array_column equivalent to php's array_column */
    if (!function_exists('array_column'))
    {
    
        function array_column(array $array, $column_key, $index_key = NULL)
        {
            if (isset($array))
            {
                $return = array();
                foreach ($array as $a)
                {
                    if ($index_key)
                    {
                        if (!isset($a[$index_key]))
                        {
                            return array();
                        }
                        else
                        {
                            $return[$a[$index_key]] = $a[$column_key];
                        }
                    }
                    else
                    {
                        $return[] = $a[$column_key];
                    }
                }
                return $return;
            }
            return array();
        }
    }
    

    以下是取自PHP.NET的一些示例

    <?php
    $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',
        )
    );
    
    $first_names = array_column($records, 'first_name');
    print_r($first_names);
    ?>
    

    它将给出以下输出:

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

    从记录集中获取姓氏列,由“id”列索引

    <?php
    $last_names = array_column($records, 'last_name', 'id');
    print_r($last_names);
    ?>
    

    它会给你如下输出:

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

    【讨论】:

      【解决方案2】:

      Calimero 绝对是 PHP 5.5+ 的最佳答案,但如果您希望在以前的版本中具有 相同 功能,请查看此存储库:https://github.com/ramsey/array_column。它是由 PHP 5.5 array_column creator 自己编写的。

      【讨论】:

      • 打败我。我正准备将其添加到我的答案中。
      【解决方案3】:

      如果你不能使用array_column,你可以使用array_map

      $names = array(
          array('id' => 123, 'name' => 'A'),
          array('id' => 456, 'name' => 'B'),
          array('id' => 789, 'name' => 'C'),
      );
      
      $ids = array_map(function ($name) {
          return $name['id'];
      }, $names);
      
      var_dump($ids);
      
      // output
      array(3) {
          [0] => int(123)
          [1] => int(456)
          [2] => int(789)
      }
      

      【讨论】:

        【解决方案4】:
        $simple = [];
        
        foreach ($stores as $store){
            $simple[] = $store['id'];
        }
        

        【讨论】:

          【解决方案5】:

          如果你使用 php 5.5+,array_column() 非常有用:

          $simple = array_column($yourarray,'id');
          

          http://php.net/array_column

          【讨论】:

          • 我正在运行 PHP 5.5.34-0ubuntu0.13.04.1。收到错误“PHP 致命错误:调用未定义的函数 array_column()”
          • 那么我怀疑您实际上并没有运行您认为正在运行的 php 版本。如果您通过网络服务器页面运行代码,请尝试以相同的方式检查您的 php 版本(使用 phpinfo() 页面)
          • 或者,如果您担心 BC,请检查您问题的其他答案,所有这些答案都可能解决问题。
          • 你说得对,我运行的是 PHP 5.4.9...不知道为什么 Ubuntu 会这样打包它。我现在已经升级到 PHP 5.5 并且 array_column 正在按预期工作。谢谢!
          猜你喜欢
          • 1970-01-01
          • 2013-02-17
          • 2021-06-09
          • 1970-01-01
          • 2019-11-29
          • 2021-12-15
          • 2013-12-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多