2013-09-10 1 views
2

Я ищу способ проверить, если значения числового массива 2D PHP вКак проверить, находятся ли значения числового 2D-массива PHP в 'incereasing', 'нисходящем' или 'смешанном' порядке?

incereasing, убыванию, или смешанного заказа.

Пример:

array(1, 2, 3, 4) // This is an incereasing numeric array 
array(4, 3, 2, 1) // This is a descending numeric array 
array(1, 3, 2, 4) // This is a mixed numeric array 

Как я могу проверить это? (Я ищу быстрый метод, он должен работать qickly)

ответ

2

Я думаю, если вы ищете быстрое решение (т.е. работает быстро), вы должны работать с массивом данных, как:

function getOrder($rgData) 
{ 
    if(!count($rgData) || count($rgData)==1) 
    { 
     return null; 
    } 
    $sCurrent = (string)array_shift($rgData); 
    $iOrder = current($rgData)>$sCurrent?1:-1; 
    foreach($rgData as $mValue) 
    { 
     if(($sCurrent>(string)$mValue && $iOrder== 1) || 
     ($sCurrent<(string)$mValue && $iOrder==-1)) 
     { 
     return 0; 
     } 
     $sCurrent = (string)$mValue; 
    } 
    return $iOrder; 
} 

это вернет 1,0 и -1 для соответствующих восходящий, смешанный и убывающий. Обратите внимание, что все значения будут обрабатываться и сравниваться как строки. Этот метод более полезен, так как он имеет сложность O(N) при использовании функции sort(), что приведет к сложности (в лучшем случае)

+0

Это действительно быстрый и плавный путь, отлично работает ! Благодарю. –

1

Предполагая, что ваша переменная называется $array это может начаться в правильном направлении:

$tempArray=sort($array); 
if($array==$tempArray) 
{ 
    // Array is in acsending order 
} 

$tempArray=arsort($array); 
if($array==$tempArray) 
{ 
    // Array is in desending order 
} 

Если ни один из этих матча, это смешано.

Редактировать: Благодаря Alma Do Mundo, Исправленный код.

+1

'sort' и это компания ** не ** возвращает массив, он возвращает bool 1/0 (и изменить массив в переданном аргументе), поэтому ваше сравнение недействительно –

+1

Это не «быстрый» метод по запросу, хотя – Sugar

+0

@AlmaDoMundo Да, вы правы. Исправленный. – Fluffeh

Смежные вопросы