如何定义我的数组按特定顺序排序的usort?
问题描述:
我想建立一个php类,它应该按照与输入的搜索查询“相似性”的顺序对来自mysql数据库的结果进行排序。我正在使用php函数similar_text。如何定义我的数组按特定顺序排序的usort?
class compare {
static $_base = NULL;
static function setBase($base) {
if (!isset ($base) or !is_string($base)) {
$base = "";
}
self::$_base = strtolower($base);
}
static function cmp($a) {
if (!is_string(self::$_base)){
self::setBase();
}
similar_text(self::$_base, strtolower($a), $a_pct);
return $a_pct;
}
static function eachcmp($src, $arr)
{
$ordered = array();
foreach($arr as $key => $val)
{
$sim = cmp($val);
$ordered[]["something"] = $arr[$key]["something"];
$ordered[]["something2"] = $arr[$key]["something2"];
$ordered[]["sim"] = $sim;
}
}
}
正如你可以在函数“eachcmp”我比较基本数组中的每个值,然后所有的值写入到一个新的数组看到。现在我的问题从这里开始。我怎样才能按照$ ordered [] [“sim”]的顺序排列数组?我知道我可能需要使用usort,但我不知道哪个函数作为usort的参数。
Thx求助! phpheini
答
首先,我认为你的函数应该是这样的:
static function eachcmp($src, $arr)
{
$ordered = array();
foreach($arr as $key => $val)
{
$sim = cmp($val);
$data = array();
$data["something"] = $arr[$key]["something"];
$data["something2"] = $arr[$key]["something2"];
$data["sim"] = $sim;
$ordered[] = $data;
}
}
否则你会被创建$ordered
数组中的新的数组元素。
现在为usort
。 usort
需要一个数组和一个比较函数。在PHP> = 5.3中,您可以使用lambda函数。适合您需要的比较功能可能如下所示:
usort($ordered, function($a, $b) {
$al = intval($a["sim"]);
$bl = intval($a["sim"]);
if ($al == $bl) {
return 0;
}
return ($al > $bl) ? +1 : -1;
});
好的,谢谢!我现在创建了一个新的功能补偿。 'function comp($ a,$ b){ \t $ al = intval($ a [“sim”]); \t $ bl = intval($ a [“sim”]); \t if($ al == $ bl){ \t \t return 0; \t} \t else return($ al> $ bl)? +1:-1; }' 我在函数eachcmp中调用该函数。所以我添加了'usort($ ordered,comp($ src,$ sim));'给每个cmp。但它给了我一个错误:usort()[function.usort]:无效的比较函数 – phpheini
你需要给一个回调函数,你给的是一个函数结果。试试'usort($命令,“comp”)'。 – halfdan
但是,这种方式,我不给功能$ a和$ b值。 – phpheini