PHP - 按价格,日期ASC,DESC等对数据行进行排序

时间:2012-05-10 14:26:22

标签: php multidimensional-array sorting

我有一个包含关联数组行的数据数组,我想按价格,日期等对它们进行排序。这不能通过SQL来完成,因为这些值不在数据库中 - 我只是有一个大数组以下示例数据:

$data[0] = array(
                 'id' => '2',
                 'price' => '400.00',
                 'date' => '2012-05-21',
                 ),
$data[1] = array(
                 'id' => '4',
                 'price' => '660.00',
                 'date' => '2012-02-21',
                 ),
$data[2] = array(
                 'id' => '8',
                 'price' => '690.00',
                 'date' => '2012-01-21',
                 )

等..................

如何根据选择框对此变量进行排序,例如按价格排序ASC / DESC和日期ASC / DESC

很抱歉,如果这很简单 - 我只是习惯通过SQL来做这件事,在这种情况下,我的想法已经空白了。

4 个答案:

答案 0 :(得分:5)

我想你可以修改这个功能: http://php.net/manual/en/function.sort.php#104464

答案 1 :(得分:3)

您应该使用usort并定义一个根据您想要的密钥进行排序的功能。

查看http://www.php.net/manual/en/function.usort.php示例2和4。

答案 2 :(得分:0)

下面的示例代码将按ID进行排序。

    $capitals = array(
     array(
             'id' => '2',
             'price' => '400.00',
             'date' => '2012-05-21',
             ),
     array(
             'id' => '1',
             'price' => '660.00',
             'date' => '2012-02-21',
             ),
     array(
             'id' => '0',
             'price' => '690.00',
             'date' => '2012-01-21',
             )

       );




  function cmp($a, $b)
  {
     return strcmp($a["id"], $b["id"]);
   }


 usort($capitals, "cmp");

 print_r($capitals);

答案 3 :(得分:-1)

使用usort

function sortBySubKey(&$array, $key)
{
    return usort($array, create_function('$a,$b', 'if ($a["'.$key.'"] == $b["'.$key.'"]) return 0; return ($a["'.$key.'"] < $b["'.$key.'"]) ? -1 : 1;'));
}

你应该确保你的数组在这个算术比较(<)的意义上保持有效值,例如。你应该将日期作为unix时间戳传递给它,价格作为浮点数等等......