我一直在用php数组挣扎几天。 不知怎的,我没有得到它来排序$ my_array。
我喜欢的是:
我管理1到3但不是第4步。
下面是简化的PHP代码
//table contents in mysql table
//---------------------
//alfa, 5, 2
//beta, 18, 3
//gamma, 7, 2
$q="SELECT * FROM model";
$result=mysql_query($q);
$total=mysql_numrows($result);
$i=0;
while ($i<$total)
{
$modelname=mysql_result($status,$i,"modelname");
$volume=mysql_result($result,$i,"volume");
$force=mysql_result($result,$i,"force");
$my_array[$i][0]=$modelname;
$my_array[$i][1]=$volume;
$my_array[$i][2]=$force;
//below the calculated value what I like to sort on later in the code
$my_array[$i][3]=$value1/$value2; /results are values like 2.5, 6, 3.5
$i++;
}
// contents of $my_array so far:
//$i, $modelname, $volume, $force, calculated result
//---------------------
// 0, alfa, 5, 2, 2.5
// 1, beta, 18, 3, 6
// 2, gamma, 7, 2, 3.5
// now how to sort my_array on the last element [3]?
// must I use sort, usort and how to sort on this fourth value?
//epected result in my_array (sort ascending on the last element)
//first element is the index in the array (used with $i)
//---------------------
//0, alfa, 5, 2, 2.5
//1, gamma, 7, 2, 3.5
//2, beta, 18, 3, 6
答案 0 :(得分:0)
这是一个简单的代码:
$my_array = array(
array( 'alfa', 5, 2, 2.5 ),
array( 'beta', 18, 3, 6 ),
array( 'gamma', 7, 2, 3.5 ),
);
usort($my_array, function($a, $b) { return $a[3] - $b[3]; });
print_r($my_array);
usort
回调说明:
如手册usort
中所述,回调有两个参数,即$my_array
的一些项。由于$my_array
的每个项目也是一个数组,您可以使用标准语法来访问数组的元素,在本例中为$a[3]
接下来,您需要返回比较结果。如手册中所述
如果第一个参数被认为分别较少,则比较函数必须返回小于,等于或大于零的整数 比,等于或大于第二个。
因此,减去$a[3] - $b[3]
会这样做。如果$a[3] < $b[3]
- 减法结果为负,否则为正数,因此比较函数只返回您需要的结果。当然,您可以使用php手册中的示例函数并编写如下内容:
function($a, $b) { return $a[3] < $b[3]? -1 : 1; }
它仍然可以使用,但$a[3] - $b[3]
执行相同操作并减少代码。