$data = array();
$data[]= array("01" ,"02", "18" , "29" , "31" , "32");
$data[]= array("02" ,"09", "11" , "22" , "24" , "27");
$data[]= array("07" ,"16", "26" , "27" , "29" , "31");
$data[]=array("04", "05", "07", "10", "13", "25");
$data[]=array("02", "04", "05", "08", "19", "22");
$data[]=array("03", "04", "15", "25", "26", "30");
$data[]=array("01", "03", "06", "12", "16", "32");
$data[]=array("01", "05", "14", www.111cn.net, "17", "22");
// 判斷表格中3個以上的連續
function checkAll($sourceArr2D) {
$count = sizeof($sourceArr2D);
for($i=0; $i<$count; $i++){
check_h($sourceArr2D[$i], $i);//找尋水平方向
if($i>0) {
check_v($sourceArr2D, $i);// 找尋豎直方向
check_l($sourceArr2D, $i);// 找尋/方向
check_r($sourceArr2D, $i);// 找尋方向
}
}
}
// 判斷水平方向
$h = array();// 儲存水平方向上的搜尋結果
function check_h($arr, $rownum) {
//sort($arr, SORT_NUMERIC);
global $h;
$flag = false;
for($i=2; $i<6; $i++){
if( $arr[$i-2]==$arr[$i]-2 ){ // 因為數組內數字不重複且有序故可取巧
if(!$flag) {
$h[$rownum] = array($arr[$i-2], $arr[$i-1], $arr[$i]);
$flag = true;
}else{
array_push($h[$rownum], $arr[$i]);
}
}
}
}
// 判斷豎直方向
$v = array();// 儲存豎直方向上的搜尋結果
function check_v($sourceArr2D, $rownum) {
global $v;
for($i=0; $i<6; $i++){
$val = $sourceArr2D[$rownum][$i];
if( in_array($rownum.'.'.$val, $v) ){
continue;
}
if( in_array($val,$sourceArr2D[$rownum-1]) && in_array($val,$sourceArr2D[$rownum+1]) ){
array_push($v, ($rownum-1).'.'.$val, $rownum.'.'.$val, ($rownum+1).'.'.$val);
$tmp = $rownum + 2;
while( ($tmp < sizeof($sourceArr2D)) && in_array($val, $sourceArr2D[$tmp]) ){
array_push($v, $tmp.'.'.$val);
$tmp++;
}
}
}
}
// 判斷/方向
$l = array();// 儲存/方向上的搜尋結果
function check_l() {
}
// 判斷方向
$r = array();// 儲存方向上的搜尋結果
function check_r() {
}
// 結束定義,開始應用
checkAll($data);
echo '<br /><br />水平方向上的找尋:';
print_r($h);
echo '<br /><br />豎直方向上的找尋:';
print_r($v);
echo '<br /><br />/方向上的找尋:';
print_r($l);
echo '<br /><br />方向上的找尋:';
print_r($r);