最简单的转换方式是什么?
$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"];
});
但我没找到。
答案 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)