在JavaScript中,可以根据字符串在每个元素中的位置对数组进行排序,使用如下内容:
arr = arr.sort(function (a, b) {
return a.indexOf(str) - b.indexOf(str);
});
可以做一个类似的事情PHP数组,使其排序取决于字符串在每个元素的位置?
我希望这对将要来的人有帮助。我建议改进@DannyPhantom的答案。
任何不包含搜索字符串的值都将放在首位。当没有找到搜索字符串时,strpos
返回false
,因此需要处理,因为我们都(应该)知道,false == 0
和strpos()
在开始时找到搜索字符串时返回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+