2012-09-10 80 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); 
    } 

感谢