Отсортировать массив приговор aphabbetically, игнорируя первое слово, если он равен 'в' (без учета регистра)


    function order_ignore_the($a, $b){
     // orders sentences ascending alphabetically, ignoring the  work "the"
     $args = func_get_args();
     foreach($args as $k=>$v){

          $sort = explode(" ",$v);
          $args[$k] = (strtolower($sort[0]) == "the" ? $sort[1] : $sort[0]);
     }

    return strcmp($args[0], $args[1]);
}

usort($array_of_sentences,'order_ignore_the');


982
0
php
задан 11 октября 2011 в 09:10 Источник Поделиться
Комментарии
1 ответ

Я не уверен, что ты там делаешь, но я думаю, что это может укоротиться до этого.

function order_ignore_the($a, $b) {
return strcmp(
strcasecmp(substr($a, 0, 3), "the") != 0 ? $a : substr($a, 3),
strcasecmp(substr($b, 0, 3), "the") != 0 ? $b : substr($b, 3)
);
}

Имейте в виду, что это не проверял.

Редактировать: длинная версия с объяснением:

function order_ignore_the($a, $b) {
// Variables for later use
$checkedA = $a;
$checkedB = $b;

// Compare the first three letters case-insensitive against "the"
if(strcasecmp(substr($checkedA, 0, 3), "the") == 0) {
// strip the "the" from the string
$checkedA = substr($checkedA, 3);
}
// Repeate for $b
if(strcasecmp(substr($checkedB, 0, 3), "the") == 0) {
$checkedB = substr($checkedB, 3);
}

// Compare both strings
return strcmp($checkedA, $checkedB);
}

Да, он поменялся, я проверяю в ближайшей версии, если строка не соответствует "В", и здесь я проверяю, если она не совпадает.

1
ответ дан 12 октября 2011 в 09:10 Источник Поделиться