2012-07-16 121 views
1

我從它在正確的方式簡單數組PHP:如何通過鍵創建關聯數組?

array( 
    array('id'=>5, 'something' => 2, 'dsadsa' => 'fsfsd) 
    array('id'=>20, 'something' => 2, 'dsadsa' => 'fsfsd) 
    array('id'=>30, 'something' => 2, 'dsadsa' => 'fsfsd) 
) 

如何創建由id字段(或別的東西)關聯數組?

array( 
    '5' => array( 'something' => 2, 'dsadsa' => 'fsfsd) 
    '20' => array( 'something' => 2, 'dsadsa' => 'fsfsd) 
    '30' => array( 'something' => 2, 'dsadsa' => 'fsfsd) 
) 

回答

1

@NikitaKuhta,nope。沒有切片函數返回與給定鍵或列標題相關聯的2D鍵控表中的一列值。你可以使用一些回調數組_...函數,但是你仍然需要爲每個元素執行一個自定義函數,所以它不值得。我不喜歡Core Xii的解決方案,因爲這會破壞原始陣列的副作用。我建議你使用參考這裏:

$new_array = array(); 
foreach ($original_array as $slice) { 
    $id = (string) $slice['id']; 
    unset($slice['id']); 
    $new_array[$id] = $slice; 
} 
# And now you don't need the missing unset($slice) 
2

東西沿着這些線。

$new_array = array(); 
foreach ($original_array as &$slice) 
    { 
    $id = (string) $slice['id']; 
    unset($slice['id']); 
    $new_array[$id] = $slice; 
    } 
+0

我可以用foreach做到這一點,但我認爲,在PHP有一些特別的功能對於任務...... – 2012-07-16 08:05:13

+0

這是一個非常特殊的任務,我不要認爲它有一個內置的功能。 – 2012-07-16 08:05:52

+0

這有一個副作用,就是從原始數組中刪除['id'] elts,並且因爲您沒有取消設置$ slice,任何賦值都會在$ new_array中產生更多的副作用! – TerryE 2012-07-16 09:31:15