2011-12-06 114 views
0

我有一個數組,看起來像這樣的「ID」索引的數組:重新組織由嵌套的數組

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)) 

回答

3

你需要在這裏做的是從您輸入每個子陣列中提取的ID。如果您將這些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,但可以在任何PHP版本中實現與create_function相同(雖然稍微不方便),但您不會感到羞恥。

See it in action

+0

尼斯的答案,清晰的意見喬恩+1 +1 – alex

1

試試這個:

$newArray = array(); 
foreach($oldArray as $key => $value) { 
    $newArray[$value['id']] = $value; 
} 
+0

爲「技術含量低」的替代,這是一件好事,牢記。 – Jon