2

我正在寻找一种方法来检查数值 2D PHP 数组的值是否在

递增递减混合顺序。

例子:

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

我怎么能检查它?(我正在寻找一种快速的方法,它需要快速运行)

4

2 回答 2

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()函数会导致O(N log(N))复杂性(在最好的情况下)

于 2013-09-10T09:34:42.473 回答
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,更正了代码。

于 2013-09-10T09:20:34.413 回答