PHP数组排序并跳过下划线

时间:2017-03-02 14:31:11

标签: php arrays sorting

我有一个默认按字母顺序排序的数组。

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;
}
  • 如何对其进行排序并跳过_字符?
  • 我不能只删除_,因为我在循环中时仍然需要它。
  • 我不关心保留关键号码。无论如何,我正在做一个foreach循环。

我正在寻找的结果是:

Array
(
    [0] => C:\xampp\htdocs\jess
    [1] => C:\xampp\htdocs\_luke
    [2] => C:\xampp\htdocs\peter
    [3] => C:\xampp\htdocs\_zod
)

3 个答案:

答案 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), '_')
    );
});