【发布时间】:2014-05-13 19:19:55
【问题描述】:
我正在尝试做与 MySQL 查询相同的操作
SELECT * FROM table ORDER BY field1, field2, ...
但使用 php 和多维数组:
$Test = array(
array("a"=>"004", "n"=>"03"),
array("a"=>"003", "n"=>"02"),
array("a"=>"001", "n"=>"02"),
array("a"=>"005", "n"=>"01"),
array("a"=>"001", "n"=>"01"),
array("a"=>"004", "n"=>"02"),
array("a"=>"003", "n"=>"01"),
array("a"=>"004", "n"=>"01")
);
function msort(&$array, $keys){
array_reverse($keys);
foreach($keys as $key){
uasort($array, sortByKey);
}
//
function sortByKey($A, $B){
global $key;
$a = $A[$key];
$b = $B[$key];
if($a==$b) return 0;
return ($a < $b)? -1 : 1 ;
}
}
//
msort($Test, array("a","n"));
//
foreach($Test as $t){
echo('<p>'.$t["a"].'-'.$t["n"].'</p>');
}
我的理论是:如果我对“重要性较低”的列和“重要性较高”的列进行多次排序,我将获得类似于上述 MySQL 查询的顺序。
不幸的是,php 正在返回:
警告:uasort() 期望参数 2 是有效回调,未找到函数 'sortByKey' 或 /Library/WebServer/Documents/www/teste.array_sort.php 第 23 行中的无效函数名称”(uasort 行)
这是一个简单的订单功能。我错过了什么?
【问题讨论】:
-
也许,我去看看。
-
参考采用了不同的方法。另外,在关闭这个不仅仅是重复的问题之前,我认为应该回答为什么代码不起作用。
-
它不起作用,因为您按 a 排序,然后又按 b 从头开始排序。你不是在提炼某种东西,而是在诉诸别的东西。此外,这不是您将函数作为回调传递的方式。此外,在函数中声明函数并没有真正起作用 [就像你认为的那样]。
-
对不起,我没有得到你的 a - b 解释,但你给了我一个线索,所以我可以在上面解决它,使用这里和参考中的所有贡献。如果你有耐心看的话,你会发现这篇文章不是重复的,我的答案是不同的。
标签: php sorting multidimensional-array usort