PHP,如何轻松地将索引数组转换为关联数组

时间:2017-03-07 14:29:05

标签: php arrays

最简单的转换方式是什么?

$a = array(
    array("id" => 1, "name" => "a1"),
    array("id" => 2, "name" => "a2")
);

$b = array(
    "a1" => array("id" => 1, "name" => "a1"),
    "a2" => array("id" => 2, "name" => "a2")
);

我期待PHP有一些函数编程工具可以做类似的事情:

$b = map($a, function($item) {
    return $item["name"];
});

但我没找到。

5 个答案:

答案 0 :(得分:9)

您可以使用PHP array_column()功能。对于您的用例,第二个参数应为null以返回完整数组。

$a = array(
array("id" => 1, "name" => "a1"),
array("id" => 2, "name" => "a2")
);

$b = array_column($a, null, 'name');

print_r($b)将导致

Array
(
[a1] => Array
    (
        [id] => 1
        [name] => a1
    )

[a2] => Array
    (
        [id] => 2
        [name] => a2
    )

)

答案 1 :(得分:3)

我看到的唯一解决方案是遍历数组并手动创建一个新数组。

例如,像这样:

$new_array = [];
foreach ($array as $value) 
    $new_array[$value['name']] = $value;

答案 2 :(得分:0)

可怜的我需要在PHP 5.2中实现它,并且我不想使用for循环

这是我的实现方式

        function getField($x) { return $x['name']; }
        $ids = array_map('getField', $result);
        $result = array_combine($ids, $result);

看看这是否对任何人都大有帮助

答案 3 :(得分:0)

可接受的答案是接近的,但“接近”仅以手榴弹计算。

($ unique是一个索引数组)

$sub_key = 'country';
$new_array = [];
foreach ($unique as $value) {
  $new_array[] = [$sub_key => $value];
}

答案 4 :(得分:0)

怎么样:

$a = array(
    array('a' => 'a0', 'b' => 'b0', 'c' => 'c0'),
    array('a' => 'a1', 'b' => 'b1', 'c' => 'c1'),
    array('a' => 'a2', 'b' => 'b2', 'c' => 'c2'),
    );
print_r($a);
print_r(array_combine(array_column($a, 'a'), $a));

其中“ a”是用作关联索引的列。

这将使列成为数组中的索引。

array_column(PHP 5> = 5.5.0,PHP 7)

array_combine(PHP 5,PHP 7)

相关问题