2015-11-05 69 views
0

請原諒我的標題,因爲我不知道如何解釋它。如何減少數組鍵值如果有缺失值

基本上,我有陣列,可以有多達40個鍵(所有巧合的獨特的價值1-40)。

所有鑰匙都需要保留其位置。但這些值需要被從「1」到「陣列內的鍵的總數」,但保持其相對位置重新編號)

此數組:

$a = array(1,5,16,7,4) 

將被轉換到一個新的數組的:

$b = array(1,3,5,4,2) 

*相對的 - 正如你所看到的,16度的變化爲5,但仍是最多的數組中,有7變爲4等。

這一直使我堅持整天。我已經使用while循環和各種各樣的東西,我只是無法讓它工作。

+0

你介意分享你的(最有希望的)嘗試嗎?正如它目前所寫,這個問題可以解釋爲「請爲我寫代碼」,而不是「請幫我理解我可以如何自己做到這一點」 – kero

+0

'min'和'max'爲您提供陣列中最高和最低值,'count'會告訴你數組中有多少元素......做數學運算(哦,即使數組中元素的位置不能改變,也沒有什麼能阻止你創建一個_copy_,是嗎? ?) –

+0

感謝Elias--這正是我想要做的,使用min,max和count,但整個事情都是一團糟。這太複雜了。 –

回答

0
$a = array(1,5,16,7,4); 
$b = $a; 
sort($a, SORT_NUMERIC); 
foreach($b as $kb => $vb){ 
    foreach($a as $ka => $va){ 
     if($vb === $va) 
      $c[] = $ka+1; 
    } 
} 
//$c will contain the result you are asking 
print_r($c); 
+0

在這個例子中,不需要維護關聯關係。我在排序之前和之後循環數組,比較獲得相同的val,並保留後排序鍵到$ c數組。我想這不是最有效的方法 – Stavros

+0

對不起,誤解了代碼 – kero

+0

優秀的Stavros!謝謝! –