2015-11-05 30 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!谢谢! –