我有一个如下所示的数组:
Array([0]=>Array([id]=>7 [name]=foo) [1]=>Array([id]=>10 [name]=bar) [2]=>Array([id]=>15 [name]=baz))
每个索引都包含另一个包含各种元素的数组,包括'id'。我想“上升”一个级别,以便我的顶级数组被相应嵌套数组的ID元素索引,但该索引仍然包含一个包含子数组中所有元素的数组?
换句话说,我如何使用PHP将上面的数组转换为:
Array([7]=>Array([id]=>7 [name]=foo) [10]=>Array([id]=>10 [name]=bar) [15]=>Array([id]=>15 [name]=baz))
答案 0 :(得分:3)
您需要做的是从输入中的每个子数组中提取ID。如果你将这些作为一个id数组,你只需要array_combine
调用重新索引原始数组就可以使用这些id作为键。
您可以使用array_map
生成这样的ID数组,这会导致:
// input data
$array = array(array('id' => '7', 'name' => 'foo'),array('id' => 10, 'name' => 'bar'));
// extract ids from the input array
$ids = array_map(function($arr) { return $arr['id']; }, $array);
// "reindex" original array using ids as array keys, keep original values
$result = array_combine($ids, $array);
print_r($result);
我用于匿名函数的语法(array_map
的第一个参数)需要PHP> = 5.3,但是你可以使用create_function
来实现相同的(虽然不太方便)任何你不会因为使用而感到羞耻的PHP版本。
<强> See it in action 强>
答案 1 :(得分:1)
试试这个:
$newArray = array();
foreach($oldArray as $key => $value) {
$newArray[$value['id']] = $value;
}
答案 2 :(得分:0)
从 PHP 5.5.0 开始,您可以使用 array_column()
代替 array_map()
来缩短代码。
$result = array_combine(array_column($array, 'id'), $array);