我目前正在创建一个由来自mysql查询的值组成的排序方法。
下面是该数组的简要视图:
Array
(
[0] => Array
(
['id'] = 1;
['countries'] = 'EN,CH,SP';
)
[1] => Array
(
['id'] = 2;
['countries'] = 'GE,SP,SV';
)
)
我已经成功地实现了一个基于数字id值的普通usort,但我更希望根据"countries“字段的内容(如果它包含一个集合字符串,在本例中是一个国家代码),然后按id字段对数组进行排序。
下面的代码片段是我关于如何做的第一个想法,但我不知道如何将它合并到一个工作函数中:
in_array('EN', explode(",",$a['countries']) );
你会怎么做?
谢谢!
不幸的是,我真的一无所获。
这就是我目前所拥有的,它给我的只是错误:uasort() [function.uasort]: Invalid comparison function
function compare($a, $b) {
global $usercountry;
if ( in_array($usercountry, $a['countries']) && in_array($usercountry, $a['countries']) ) {
$return = 0;
}
else if (in_array($usercountry, $a['countries'])) {
$return = 1;
}
else {
$return = -1;
}
return $return;
}
$array= usort($array, "compare");
有没有人可以给我一些提示,告诉我如何继续下去?
发布于 2010-01-14 06:30:57
最后在PHP.net上找到了这个奇妙的函数:
function array_msort($array, $cols)
{
$colarr = array();
foreach ($cols as $col => $order) {
$colarr[$col] = array();
foreach ($array as $k => $row) { $colarr[$col]['_'.$k] = strtolower($row[$col]); }
}
$eval = 'array_multisort(';
foreach ($cols as $col => $order) {
$eval .= '$colarr[\''.$col.'\'],'.$order.',';
}
$eval = substr($eval,0,-1).');';
eval($eval);
$ret = array();
foreach ($colarr as $col => $arr) {
foreach ($arr as $k => $v) {
$k = substr($k,1);
if (!isset($ret[$k])) $ret[$k] = $array[$k];
$ret[$k][$col] = $array[$k][$col];
}
}
return $ret;
}
每个国家是这样的:$array‘’countries‘= in_array($needle,$haystack);}
$array = $array = array_msort($array, array('countries'=>SORT_DESC, 'id'=>SORT_ASC));
感谢大家的帮助!
发布于 2010-01-14 02:43:59
您可能会考虑array_walk
、array_walk_recursive
和array_map
,当它们组合在一起时,可能会实现您想做的事情。
https://stackoverflow.com/questions/2059255
复制相似问题