使用uasort对数组进行排序与​​使用正则表达式的字符串进行比较

时间:2013-06-10 17:05:17

标签: php regex string sorting

我试图通过使用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回报,我错了!:/ 谢谢

1 个答案:

答案 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进行不区分大小写的排序