PHP: Как отсортировать символы в строке? - PullRequest
18 голосов
/ 28 марта 2012

У меня есть набор строк, содержащих символы в скрипте PHP, мне нужно отсортировать эти символы в каждой строке.

Например:

"bac" -> "abc"
"abc" -> "abc"
"" -> ""
"poeh" -> "ehop"

Эти символы не имеют акцентов и все в нижнем регистре. Как я могу выполнить это в PHP?

Ответы [ 5 ]

41 голосов
/ 28 марта 2012

Я бы сделал это массивом и использовал бы функцию сортировки:

$string = 'bac';

$stringParts = str_split($string);
sort($stringParts);
echo implode('', $stringParts); // abc
5 голосов
/ 16 февраля 2013

При использовании сортировки текст должен быть строчным.У меня были строки в верхнем регистре, которые вызывали много проблем на моем чрезвычайно строковом тяжелом сайте с asort () и sort (), не знающими этого;).Я использую следующую функцию для быстрого сценария.Обратите внимание на «strtolower» для функции allChars.Затем вы можете манипулировать, как вам нужно позже, строчными буквами.Или другой порядок строк, который обрабатывает верхний и нижний регистр, - natcasesort () .Natcasesort, который обрабатывает правильное (естественное) упорядочение - так, как мы упорядочиваем вещи на бумаге.Вы можете предоставить массив и использовать foreach для разделения каждого слова.Или используйте это как основу для создания функции, которая обрабатывает массивы.Вы можете использовать implode ('', $ letters) вместо оператора foreach - но эта функция позволяет вам изменять буквы, если вам нужно - просто делайте это внутри foreach.Также добавлены функции взрыва в случае, если кто-то их предпочитает.

Только строчные буквы

function allChars($w){
    $letters = str_split(strtolower($w)); sort($letters);
    $ret = "";
    foreach($letters as $letter){
        $ret .= $letter;
    }
    return $ret;
}

Только строчные буквы с имплозой

function implodeAllChars($w){
    $letters = str_split(strtolower($w)); sort($letters);
    return implode('',$letters);
}

Функция естественного упорядочения

function allCharsNat($w){
    $letters = str_split($w); natcasesort($letters);
    $ret = "";
    foreach($letters as $letter){
        $ret .= $letter;
    }
    return $ret;
}

Естественное упорядочение с помощью взрыва

function allCharsNatImplode($w){
    $letters = str_split($w); natcasesort($letters);
    return implode('',$letters);
}

Это быстро и просто.

3 голосов
/ 28 марта 2012
function sort_alphabet($str) {
    $array = array();
    for($i = 0; $i < strlen($str); $i++) {
        $array[] = $str{$i};
    }
    // alternatively $array = str_split($str);
    // forgot about this

    sort($array);
    return implode('', $array);
}
1 голос
/ 28 марта 2012

Вы можете разбить строку на массив и затем использовать любую из различных функций сортировки .

$in = "this is a test";
$chars = str_split($in);
sort($chars);
$out = implode($chars);
0 голосов
/ 30 мая 2019

Имейте в виду, что str_split () не поддерживает многобайтовые строки. В случае, если вам приходится иметь дело, например, с Строки UTF-8, вместо них следует использовать preg_split ():

$string = 'bac';
$stringParts = preg_split('//u', $string);
sort($stringParts);
echo implode('', $stringParts); // abc
...