我正在寻找一种方法来检查数字2D PHP数组的值是否在
中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
我该怎么检查? (我正在寻找一种快速的方法,它需要快速运行)
答案 0 :(得分: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))
复杂性(在最好的情况下)
答案 1 :(得分: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,更正了代码。