天天看点

PHP根据条件分页

题目:一个数组有0和1,各值数目不定,其中单页0连续数最多排4个,单页1连续数最多排3个,0和1处在同一页则自适应为6个。

<?php
/*
 * 0连续最多排4个
 * 1连续最多排3个
 * 0和1自适应共6个
 * */
$arr = array(0,0,0,0,		//0
			 1,1,0,0,0,0,	//1
			 0,0,1,1,1,1,	//2
			 1,0,0,1,1,0,	//3
			 0,0,0,0,		//4
			1,1,1,			//5
			 0,0,1,1,0,1,	//6
			 1,1,1,			//7
			 1,0			//8
			);		
$x = $y = $page = $x1 = $y1 = 0;
$arr1 = array();
foreach($arr as $k => $v){
	$arr1[] = $page.'_'.$v.'_'.$k;
	if ($v == 1){
		$x++;
		if ($y == 0){ //1排第1个
			if (!$x1 && $x == 3) {//1排了3个
				$page++;
				$x = 0;
			}
			if ($x1){
				if ($k >= $x1) { //0此时自适应排满
					$x1 = $x = 0;
					$page++;
				}
			}
		} else{	//0排第x+1个
			if($x1){
				$page++;
				$y = $y1 = $x = $x1 = 0;
			}elseif (!$x1){
				$x1 = $k + 6 - $y - 1;
				$y = 0;
			}
				
		}
	}elseif($v == 0){
		$y++;
		if ($x == 0){ //0排第1个
			if (!$y1 && $y == 4) {//0排了4个
				$page++;
				$y = 0;
			}
			if ($y1){
				if ($k >= $y1){ //0此时自适应排满
					$y1 = $y = 0;
					$page++;
				}
			}
		} else{	//0排第x+1个
			if ($y1) {
				$x = $x1 = $y = $y1 = 0;
				$page++;
			}elseif (!$y1) {
				$y1 = $k + 6 - $x - 1;
				$x = 0;
			}
			
		}
	}
}
var_dump($arr1);

?>
           

这个分页主要卡在细节部分,这部分花了半天了。。。。

现在记录下来~~