【问题标题】:is there a way to have array_column() keep the $input array key?有没有办法让 array_column() 保留 $input 数组键?
【发布时间】:2017-06-20 13:53:03
【问题描述】:

假设我有一个记录数组,以某个 ID 为键,我使用 array_column() 函数从每条记录中提取一条数据。

$records = array(
    1234 => array(
        'first_name' => 'John',
        'last_name' => 'Doe',
    ),
    4567 => array(
        'first_name' => 'Sally',
        'last_name' => 'Smith',
    ),
);

array_column($input, 'first_name') 的结果是一个数字索引数组(具有新键 0、1、...)。有没有办法保留输入数组中的键?

【问题讨论】:

标签: php arrays


【解决方案1】:
array_map(function ($r) { return $r['first_name']; }, $records)

可以(根据您的具体情况)。

它或多或少相当于这个(PHP 7+):

(function () use ($records) {
    $result = [];
    foreach ($records as $key => $r) {
        $result[$key] = $r['first_name'];
    }
    return $result;
)()

【讨论】:

    【解决方案2】:

    当 id 在数据数组中也可用时,您可以使用 array_column 的第三个参数。

    例如: array_column($records, 'first_name', 'id');

    【讨论】:

    • 对不起,我应该说清楚 - 数组中没有所需的数据,只能作为键。
    【解决方案3】:

    这是我经常使用的一个简单函数:

    function array_column_with_keys(array $array, string $column): array {
        return array_combine(
            array_keys($array), 
            array_column($array, $column));
    }
    

    所以使用您的示例数组,

    var_export(array_column_with_keys($records, 'first_name'));

    将返回:

    array (
      1234 => 'John',
      4567 => 'Sally',
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-20
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-01
      相关资源
      最近更新 更多