0

我有一个包含关联数组行的数据数组,我想按价格、日期等对它们进行排序。这不能通过 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',
                 )

ETC..................

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

对不起,如果这很简单——我只是习惯于通过 SQL 来做这件事,在这种情况下我的大脑一片空白。

4

4 回答 4

5

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

于 2012-05-10T14:36:15.150 回答
3

您应该使用usort并定义一个根据您想要的键进行排序的函数。

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

于 2012-05-10T14:30:05.443 回答
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);
于 2012-05-10T14:51:16.760 回答
-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时间戳传递,将价格作为浮点数等等......

于 2012-05-10T14:41:36.407 回答