2012-12-18 64 views
0

我對數組的轉換有問題。 我有這樣的陣列:用數字替換數組中的一個值

Array 
    (
    [0] => Array 
    (
     [x] => 1291 
     [y] => 32 
     [z] => 1142 
     [number] => 51 
    ) 

    [1] => Array 
    (
     [x] => 1415 
     [y] => 32 
     [z] => 1142 
     [number] => 22 
    ) 
) 

如何從這個做出,陣列

Array 
    (
    [51] => Array 
    (
     [x] => 1291 
     [y] => 32 
     [z] => 1142 
    ) 

    [22] => Array 
    (
     [x] => 1415 
     [y] => 32 
     [z] => 1142 
    ) 

) 

[數字]不必從陣列中移除。重要的是要成爲關鍵。

回答

2
$numbers = array(); 
//Get the list of 'number' keys and unset them (optional) 
foreach ($array as &$values) { 
    $numbers[] = $values['number']; 
    unset($values['number']); 
} 
//create a new array with numbers as keys and the original array as values 
//You could also overwrite the original array, which will save some memory 
$result = array_combine($numbers, $array); 
1

您可以創建一個新的數組

$newarray = array(); 
foreach($yourarray as $k=>$v) { 
    $newarray[$v['number']] = $v 
} 

print_r($newarray); 
+0

你沒有取消設置「數字」鍵 – artragis

+0

我必須要嗎? –

+0

這是他想要的:看結果數組。 – artragis

1

超過您最初的陣列的簡單循環可以解決這個問題:

$new = array(); 

foreach($old as $item) { 
    $key = $item['number']; 
    $new[$key] = $item; 
} 

var_dump($new); 
+0

你沒有取消設置「數字」鍵。 – artragis

+0

@artragis我知道。那不是要求,是嗎? – alexn

+0

這是:看看結果數組。 – artragis

1

無需創建一個新的數組,因爲許多其他的答案表明,這可以在原地完成。

foreach ($array as $key => $value) 
{ 
    $array[$value["number"]] = $array[$key]; 

    // remove number attribute (optional) 
    unset($array[$value["number"]]["number"]); 

    // remove array @ original key 
    unset($array[$key]); 
} 
+0

這隻顯示我最後一個鍵在數組中。 – Damonsson

相關問題