如何根据字符串在每个元素中的位置排序PHP数组


How to sort PHP array depending on the position of a string in each element?

在JavaScript中,可以根据字符串在每个元素中的位置对数组进行排序,使用如下内容:

arr = arr.sort(function (a, b) {
    return a.indexOf(str) - b.indexOf(str);
}); 

可以做一个类似的事情PHP数组,使其排序取决于字符串在每个元素的位置?

我希望这对将要来的人有帮助。我建议改进@DannyPhantom的答案。

任何不包含搜索字符串的值都将放在首位。当没有找到搜索字符串时,strpos返回false,因此需要处理,因为我们都(应该)知道,false == 0strpos()在开始时找到搜索字符串时返回0。

正如PHPDoc所说的

此函数可能返回布尔值FALSE,但也可能返回a非布尔值,计算结果为FALSE。请阅读关于布尔值获取更多信息。使用===操作符来测试返回该函数的值。

那么,这就是我的解决方案

usort($arr, function($a, $b) use ($str) {
    $idx_a = strpos($a, $str) === false ? PHP_INT_MAX : strpos($a, $str);
    $idx_b = strpos($b, $str) === false ? PHP_INT_MAX : strpos($b, $str);
    return $idx_a - $idx_b;
});

是的,您将不得不使用ussort和strpos做几乎相同的事情。匿名函数也可以。

usort($arr, function($a, $b) use ($str) {return strpos($a, $str) - strpos($b, $str)}) //code is not tested, though should work

$str是你正在搜索的字符串,$arr是你的数组

注意:use只能在PHP 5.3+

下工作