strcmp equivelant для целых чисел (intcmp) в PHP

Таким образом, мы получили эту функцию в PHP

strcmp(string $1,string $2) // returns -1,0, or 1;

Мы не Делаем однако, имеем intcmp (); Таким образом, я создал тот:

function intcmp($a,$b) {
    if((int)$a == (int)$b)return 0;
    if((int)$a  > (int)$b)return 1;
    if((int)$a  < (int)$b)return -1;
}

Это просто чувствует себя грязным. Что Вы все думаете?

это - часть класса для сортировки Javascripts по значению упорядочивания, переданному в.

class JS
{
    // array('order'=>0,'path'=>'/js/somefile.js','attr'=>array());
    public $javascripts = array(); 
    ...
    public function __toString()
    {
        uasort($this->javascripts,array($this,'sortScripts'));
        return $this->render();
    }
    private function sortScripts($a,$b)
    {
        if((int)$a['order'] == (int)$b['order']) return 0;
        if((int)$a['order'] > (int)$b['order']) return 1;
        if((int)$a['order'] < (int)$b['order']) return -1;
    }
    ....
}
63
задан MPelletier 8 December 2011 в 04:01
поделиться

5 ответов

Отсортируйте данные с помощью:

function sortScripts($a, $b)
{
    return $a['order'] - $b['order'];
}

Используйте $ b- $ a, если вы хотите обратный порядок.

Если рассматриваемые числа превышают целочисленный диапазон PHP, вернет ($ a <$ b)? -1: (($ a> $ b)? 1: 0) более надежен.

101
ответ дан 24 November 2019 в 16:16
поделиться

Вы могли бы использовать

function intcmp($a,$b)
    {
    return ($a-$b) ? ($a-$b)/abs($a-$b) : 0;
    }

Хотя я вообще не вижу смысла в использовании этой функции

12
ответ дан 24 November 2019 в 16:16
поделиться

Должны быть +1 и -1? Если нет, просто верните (int) $ a - (int) $ b . Мне не нравится разделение, рекомендованное кем-то другим, и нет необходимости проверять все три случая. Если не больше и не равно, должно быть меньше.

return (int) $a > (int) $b ? 1 : (int) $a == (int) $b ? 0 : -1;
4
ответ дан 24 November 2019 в 16:16
поделиться

Я бы не стал называть это грязным как таковым, это кажется достаточным. Но я не знаю, где бы использовать эту функцию. Мое единственное предложение могло бы заключаться в том, чтобы включить else :

function intcmp($a,$b)
{
    if((int)$a == (int)$b)return 0;
    else if((int)$a  > (int)$b)return 1;
    else if((int)$a  < (int)$b)return -1;
}
3
ответ дан 24 November 2019 в 16:16
поделиться

На первый взгляд, да, это кажется грязным. За исключением того, что должна быть веская причина, по которой вы написали это вместо того, чтобы просто использовать фактические операторы == , > и <. Что послужило мотивацией для создания этой функции?

Если бы это был я, я бы, наверное, сделал что-то вроде:

$x = $a==$b ? 0 : ($a>$b ? 1 : ($a<$b ? -1 : null));

Я понимаю, что это так же уродливо, и : null; - нет уверен, требует ли PHP этого или я мог бы только что выполнить :; , но мне это не нравится, и этот код никогда не должен выполняться в любом случае ... Я думаю, что я был бы намного менее запутан, если бы Я знал исходные требования!

1
ответ дан 24 November 2019 в 16:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: