我有一个默认按字母顺序排序的数组。
Array
(
[0] => C:\xampp\htdocs\_luke
[1] => C:\xampp\htdocs\_zod
[2] => C:\xampp\htdocs\jess
[3] => C:\xampp\htdocs\peter
)
我的代码将是这样的:
foreach($array as $item) {
echo $item;
}
_
字符?_
,因为我在循环中时仍然需要它。我正在寻找的结果是:
Array
(
[0] => C:\xampp\htdocs\jess
[1] => C:\xampp\htdocs\_luke
[2] => C:\xampp\htdocs\peter
[3] => C:\xampp\htdocs\_zod
)
答案 0 :(得分:3)
你正在寻找的是usort
,它有一个适合的回调函数来进行比较。
像这样使用:
usort($array, function($elemA, $elemB) {
return strcmp(str_replace("_", "", $elemA), str_replace("_", "", $elemB));
});
这将使用strcmp
比较您的元素,但忽略下划线“_”。
答案 1 :(得分:0)
function cmp($a, $b)
{
$a = preg_replace('/\_/', '', $a);
$b = preg_replace('/\_/', '', $b);
return strcmp($a, $b);
}
$array = Array
(
'C:\xampp\htdocs\_luke',
'C:\xampp\htdocs\_zod',
'C:\xampp\htdocs\jess',
'C:\xampp\htdocs\peter'
);
usort($array, "cmp");
print_r($array);
使用辅助方法进行"均衡"文本。
答案 2 :(得分:0)
我已经设定了另一个接受的答案,但这是我最终的结果。它可以给别人一些如何只处理第一个下划线的提示。
usort($folders, function($a, $b) {
return strcmp(
ltrim(basename($a), '_'),
ltrim(basename($b), '_')
);
});