資料就剪成最少的可能的數量,然後再對這些資料進行遍歷查找,就可以了。 | 程式碼如下: |
<?php
/*
$data 数组
$number 查找的数
$rows 数组的行数
$columns 数组的列数
*/
function inArray($data,$number,$rows,$columns)
{
$row=0;
$column=$columns-1;
$first=true;
while($row<$rows&&$column>=0)
{
if($data[$row][$column]>$number&&$first)
{
$column--;
//echo $column.',';
}
if($data[$row][$column]<$number)
{
$first=false;
$row++;
//echo $row.',';
//如果查找的数大于数组中的所有元素,那么就遍历完所有的行后退出
//continue是防止这种情况的出现,会和第四个条件冲突
continue;
}
if($data[$row][$column]==$number)
{
return true;
}
if($data[$row][$column]>$number&&!$first)
{
break;
}
}
for($i=$row;$i<$rows;$i++)
{
for($j=0;$j<$column;$j++)
{
if($data[$i][$j]==$number)
{
return true;
}
}
}
return false;
}
$a=array(array(1,2,8,9),array(2,4,9,12),array(4,7,10,13),array(6,8,11,15));
var_dump(inArray($a,7,4,4));
var_dump(inArray($a,101,4,4));