我有一个数组,其中有一些值正在动态声明:
// 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);
答案 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];
}