2011-11-09 42 views
2

我有一個2D陣列看起來像這樣:爲什麼我不能在數字上排序嵌套數組?

array(2) { 
    [45]=> 
    array(5) { 
    [0]=> 
    int(2) 
    [1]=> 
    int(5) 
    [2]=> 
    int(1) 
    [3]=> 
    int(3) 
    [4]=> 
    int(4) 
    } 
    [42]=> 
    array(5) { 
    [0]=> 
    int(5) 
    [1]=> 
    int(4) 
    [2]=> 
    int(3) 
    [3]=> 
    int(2) 
    [4]=> 
    int(1) 
    } 
} 

外陣列的關鍵值是數字的,但在0不啓動,而不是連續的。我想通過上升鍵外陣列,並且通過升值內數組進行排序,讓我試試這個:

ksort($arr); 
foreach ($arr as $a) { 
    sort($a); 
} 
var_dump($arr); 

這種種預期外陣列,但似乎並沒有觸及內心陣列在全部:

array(2) { 
    [42]=> 
    array(5) { 
    [0]=> 
    int(5) 
    [1]=> 
    int(4) 
    [2]=> 
    int(3) 
    [3]=> 
    int(2) 
    [4]=> 
    int(1) 
    } 
    [45]=> 
    array(5) { 
    [0]=> 
    int(2) 
    [1]=> 
    int(5) 
    [2]=> 
    int(1) 
    [3]=> 
    int(3) 
    [4]=> 
    int(4) 
    } 
} 

這是爲什麼,我該如何實現我想要的?我覺得這件事情做的陣列嵌套,因爲預期了以下工作:

$test = array(5,2,3,1,4); 
sort($test); 
var_dump($test); 

array(5) { 
    [0]=> 
    int(1) 
    [1]=> 
    int(2) 
    [2]=> 
    int(3) 
    [3]=> 
    int(4) 
    [4]=> 
    int(5) 
} 

回答

11

foreach遍歷一個複製陣列的。如果要修改的實際值,你必須參考他們:

//    v 
foreach ($arr as &$a) { 
    sort($a); 
} 
unset($a); 

documentation

隨着PHP 5的,你可以很容易地通過$值之前修改數組的元素與&。這將分配參考而不是複製該值。

+0

是的,就這樣做了。謝謝。 – shanethehat

+0

不客氣:) –

+0

不要忘記標記問題的解決方案,所以費利克斯得到了他的聲望點...... :) – toon81

相關問題