挣扎了几天来排序php数组

时间:2015-12-19 21:15:25

标签: php arrays sorting

我一直在用php数组挣扎几天。 不知怎的,我没有得到它来排序$ my_array。

我喜欢的是:

  1. 从mysql表中读取数据[有效]
  2. 将数据放入my_array [有效]
  3. 根据该表中的数据计算一个值,并将其添加到my_array [有效]
  4. 对第3步中“计算”值的数组进行排序。[失败了这个]
  5. 我管理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
    

1 个答案:

答案 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]执行相同操作并减少代码。