2012-09-10 83 views
0

爲什麼$val是Array(1),但不是數值?我預計$selected as $k => $val應該返回陣列$selected的每一行。因此,$k必須是數字鍵(它是)並且$val必須是相應的數值(但它是一個數組而不是簡單的整數)。 那麼,我該如何正確保存排序的鍵和值$ind$ranks閱讀排序陣列

<?php 

     $selected = array(); 

     for ($i=0; $i<5; $i++) { 
      $selected[] = array($i => rand(0,5)); 
     } 

     arsort($selected); 

     $ind = array(); 
     $rank = array(); 
     foreach($selected as $k => $val) { 
      $ind[] = $k; 
      $rank[] = $val; 
     } 
?> 

UPDATE: 對於incstance,這個代碼..

for ($i=0; $i<5; $i++) { 
    $selected[$i] = rand(0,5); 
} 

提供的陣列: [0] => 5,[1] => 3,[2] => 2, [3] => 5,[4] => 3

一旦我排序它,初始鍵被刪除,對吧?在排序數組後,如何才能找到隨機生成值的初始鍵[0] - [4]?

+0

的按鍵不會被刪除。由於您使用的是保持鍵的原始關係的字符串,因此它們保持不變。 – sberry

回答

2

我覺得自己可能的解決辦法是改變

$selected[] = array($i => rand(0,5)); 

$selected[] = rand(0,5); 

這樣做會產生$ind$rank這樣的:

Array 
(
    [0] => 0 
    [1] => 3 
    [2] => 2 
    [3] => 4 
    [4] => 1 
) 
Array 
(
    [0] => 4 
    [1] => 3 
    [2] => 1 
    [3] => 0 
    [4] => 0 
) 

做什麼最好的方法你想要的只是使用結果數組,例如:

$selected

Array 
(
    [1] => 5 
    [2] => 5 
    [4] => 4 
    [0] => 2 
    [3] => 1 
) 
+0

在這種情況下,一旦我對數組進行排序,我怎麼知道它的初始索引(key = 0,1,2,3,4)? –

+0

看我的編輯。 ''arsort'將維護這些密鑰,就像你在'print_r($ selected)'的輸出中看到的那樣。 – sberry

+0

喔,很好。謝謝。 –

0

我覺得這是你所需要的

for ($i=0; $i<5; $i++) { 
    $selected[$i] = rand(0,5); 
} 
+0

一旦我對數組進行排序(arsort),我如何知道每個值的初始(未排序)索引(鍵= 0,1,2,3,4)? –

0

你的陣列結構看起來就像這樣:

array(
    0 => array(0 => 1), 
    1 => array(1 => 4), 
    ... 
) 

因爲你分配一個陣列這裏:

$selected[] = array($i => rand(0,5)); 

你只是想這個:

$selected[] = rand(0,5); 
0

嗨,我不是非常確定你正在嘗試做的,但下面的代碼是創建一個數組的數組。

$selected = array(); 

     for ($i=0; $i<5; $i++) { 
      $selected[] = array($i => rand(0,5)); 
     } 

因此$ val將是一個數組。你可以試試下面的代碼:

$selected = array(); 

    for ($i=0; $i<5; $i++) { 
     $selected[] = rand(0,5); 
    } 

感謝