【问题标题】:How to use multidimensional array associative key's value as the index in PHP? [duplicate]如何使用多维数组关联键的值作为 PHP 中的索引? [复制]
【发布时间】:2021-05-05 12:18:10
【问题描述】:

我有一个多维数组,我想“重新索引”以使用特定键的值作为索引。结果来自 MySQL 查询。

示例数组:

<php
$array = [
   [
      'name' => 'Bob',
      'age' => 31,
      'department' => 'IT'
   ],
   [
      'name' => 'Rita',
      'age' => 20,
      'department' => 'Accounts'
   ],
   [
      'name' => 'Sue',
      'age' => 19,
      'department' => 'Sales'
   ],
];

我想将其“转换”为以下结果:

<?php
$array = [
   'Bob' => [
      'name' => 'Bob',
      'age' => 31,
      'department' => 'IT'
   ],
   'Rita' => [
      'name' => 'Rita',
      'age' => 20,
      'department' => 'Accounts'
   ],
   'Sue' => [
      'name' => 'Sue',
      'age' => 19,
      'department' => 'Sales'
   ],
];

我希望有一个 php 函数可以轻松地做到这一点,但我还没有找到一个而且我想出的唯一解决方案是循环遍历数组,如果可能的话我想避免这种情况。

有没有办法使用 php 数组函数来做到这一点?

注意:我可以 100% 保证我希望用作索引的字段是唯一的。

【问题讨论】:

  • 没有办法避免循环。如果您使用内置 PHP 函数,它们仍将在内部循环数组,因为没有其他方法可以应用转换 - 它必须被遍历。话虽这么说,我不相信存在这种特定功能。
  • 不过,您究竟是如何从查询中获取此数组的?您是否正在使用类似一次获取所有行的方法?
  • @AlivetoDie 不过,问题的最后一个注释消除了这种担忧。
  • 听起来你可以在从查询中卸载结果集的过程中这样做

标签: php mysql arrays


【解决方案1】:

通过迭代并使用您需要的键创建结果数组非常容易。像这样。

<?php

$array = [
    [
        'name'       => 'Bob',
        'age'        => 31,
        'department' => 'IT',
    ],
    [
        'name'       => 'Rita',
        'age'        => 20,
        'department' => 'Accounts',
    ],
    [
        'name'       => 'Sue',
        'age'        => 19,
        'department' => 'Sales',
    ],
];

$result = [];

foreach ($array as $element) {
    $result[$element['name']] = $element;
}

var_dump($result);

// OR using array_column function

$result = array_column($array, null, 'name');

var_dump($result);

【讨论】:

  • 谢谢,不过,我希望能找到一种无需遍历数组的方法。示例数组只有 3 长,但实际数据要长得多。
  • 任何内置函数仍会在内部循环遍历数组。您需要处理键和值,在这种情况下,没有单个函数可以对其进行排序,因此您必须使用至少两个函数,这将遍历数组两次。在这种情况下,最佳方法是使用 foreach 循环。
  • 在这种情况下,没有单个函数可以对其进行排序 - 来自重复的 array_column($array, null, 'name'); - 还是我遗漏了什么?
  • 你是对的,array_column 可以解决问题。但它仍然会在内部迭代。
猜你喜欢
  • 2015-03-19
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 2020-03-05
  • 2020-04-16
相关资源
最近更新 更多