我有一个包含关联数组行的数据数组,我想按价格,日期等对它们进行排序。这不能通过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来做这件事,在这种情况下,我的想法已经空白了。
答案 0 :(得分:5)
我想你可以修改这个功能: http://php.net/manual/en/function.sort.php#104464
答案 1 :(得分:3)
您应该使用usort
并定义一个根据您想要的密钥进行排序的功能。
答案 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时间戳传递给它,价格作为浮点数等等......