1

我正在尝试通过使用 uasort 和 regex 将数组“$refs”与字符串“$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 个喜欢的回报,我的错误在哪里!:/ 谢谢

4

1 回答 1

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

于 2013-06-10T17:15:59.023 回答