我试图通过使用uasort和regex将它与字符串“$ term”进行比较来对数组“$ refs”进行排序:
这是我的阵列:
Array
(
[0] => Array
(
[id] => 71063
[uniqid] => A12171063
[label] => Pratique...
)
[1] => Array
(
[id] => 71067
[uniqid] => A12171067
[label] => Etre....
)
...
和我的代码:
uasort($refs, function ($a, $b) use ($term) {
$patern='/^' . $term . '/';
if ((preg_match($patern, $a['label']) - preg_match($patern, $b['label']) )== 0) {
return 0;
}
if ((preg_match($patern, $a['label']) - preg_match($patern, $b['label'])) == 1) {
return -1;
}
if ((preg_match($patern, $a['label']) - preg_match($patern, $b['label'])) == -1) {
return 1;
}
});
我只有0回报,我错了!:/ 谢谢
答案 0 :(得分:3)
不会回答上述问题,但您可以使用此问题。它将根据术语与字符串开头的接近程度对结果进行有效排名。
function ($a, $b) use ($term) {
return stripos($a, $term) - stripos($b, $term);
}
只有当所有值都包含在其中的某个位置时(例如类似查询的结果),这才有效。
测试脚本:
$arr = array("aaTest", "aTest", "AAATest", "Test");
$term = "Test";
uasort($arr, function ($a, $b) use ($term) {
return stripos($a, $term) - stripos($b, $term);
});
print_r($arr);
测试输出:
Array
(
[3] => Test
[1] => aTest
[0] => aaTest
[2] => AAATest
)
<强>更新强>
更改代码以使用stripos而不是strpos进行不区分大小写的排序