排序多维数组php

时间:2012-03-07 14:25:50

标签: php

我有一个数组,其中有一些值正在动态声明:

// a for loop that finds elements from source
$array[] = array($fruit, $color, $shape, $price);

稍后我有另一个for循环显示数组中的项目:

for($j = 0; $j < sizeof($array); $j++) {
    echo $array[$j][0]." ".$array[$j][1]." ".$array[$j][2]." ".$array[$j][3]."
             ".$array[$j][4];
}

我能够正确显示我想要的所有信息,但是我想在显示之前根据$ price对数组进行排序。 e.g

Orange orange round £.6
Mango yellow oval £.9
Apple red round £.4

我希望以下列形式

Apple red round £.4
Orange orange round £.6
Mango yellow oval £.9

使用uasort: 之前:

Array ( [0] => Array ( [0] => Orange [1] => red [2] => round [3] => .6) 
        [1] => Array ( [0] => Mango [1] => yellow [2] => oval [3] => .9)
        [2] => Array ( [0] => Apple [1] => red [2] => round [3] => .4));

提供的功能:

function my_cmp_func($a, $b) {
   if($a[3] == $b[3]){
       return -1*strcmp($a[4], $b[4]); // another column added for comparison
   }
   return -1*strcmp($a[3], $b[3]);     
}

uasort($array, 'my_cmp_func');
print_r($array);

5 个答案:

答案 0 :(得分:3)

你可以使用自定义比较功能

来做到这一点

所以你首先使用usort函数(如果你不需要保留索引) 所以你会这样称呼它:

usort($array, 'my_cmp_func');

并将比较函数定义为:

function my_cmp_func($a, $b)
{
    return strcmp($a[3], $b[3]);    
}

我使用strcmp定义了这个函数,因为我不知道井号是否是值的一部分,或者你现在只是添加了它...但你可以按照你想要的方式定义函数

编辑:我在此处添加了示例http://codepad.org/DxgFznzE以表明它有效;如果你想颠倒排序顺序,只需在函数中使用它:

return -1*strcmp($a[3], $b[3]);

而不仅仅是你从strcmp获得的值

答案 1 :(得分:1)

如果我想编写此代码。

我会做另一个数组。排序后会收到该值。

然后我会显示输出。 我建议泡泡排序对此很简单。

干杯!

其中一个例子就是这样的

$numbers = array(1,3,2,5,2);  
$array_size = count($numbers);  
echo "Numbers before sort: ";  
for ( $i = 0; $i < $array_size; $i++ )  
   echo $numbers[$i];  
echo "n";  
for ( $i = 0; $i < $array_size; $i++ )  
{  
   for ($j = 0; $j < $array_size; $j++ )  
   {  
      if ($numbers[$i] < $numbers[$j])  
      {  

     //all the swapping variable here.....
         $temp = $numbers[$i];  
         $numbers[$i] = $numbers[$j];  
         $numbers[$j] = $temp;  
      }  
   }  
}  

echo "Numbers after sort: ";  
for( $i = 0; $i < $array_size; $i++ )  
   echo $numbers[$i];  
echo "n";  

答案 2 :(得分:0)

将其存储在associative array中,这样您就可以使用价格作为键,并按升序键轻松打印项目。

答案 3 :(得分:0)

如果您不打算重复价格,请使用价格作为数组的键。像:

$array[$price] = array($fruit, $color, $shape, $price);

然后按键排序:

ksort($array);

然后输出你的输出。

如果您有重复价格,可以使用array_walk或array_multisort。

答案 4 :(得分:0)

只需在for循环之前调用array_multisort($array);

array_multisort()可以执行许多有用的排序操作 - 请参阅此处的详细信息 - http://www.php.net/manual/en/function.array-multisort.php

此外,您的for循环可以简化为 -

foreach($array as $a) {
    echo $a[0] . " " . $a[1] . " " . $a[2] . " " . $a[3];
}