// 初始数据
$data = array( array(1,2,2), array(3,1,2), array(2,2,2),
array(1,3,2), array(2,4), array(1,1,2,2)
);
$allArr = $temp = array();
$maxArr = array(); // 将所有最大值放到一个数组里
$sum = 0;
// 重新分配数据
foreach($data as $key=>$val){
$tempArr = array();
$total = count($val);
for($i=1; $i<=$total; $i++){
$temp = array_slice($val, 0, $i); // 从每个数组第0个位置开始切,每次切$i个
$sum = array_sum($temp); // 计算切完之后里面的所有值相加的总和
$tempArr[] = $sum; // 将所有数值保存到数组里
if($i === $total){
$maxArr[] = $sum;
}
}
$allArr[] = $tempArr; // 将数据保存到一个大的数组里
}
rsort($maxArr); // 倒序排列 array(6,6,6,6,6,5);
$max = current($maxArr); // 即获取数组里面的最大总和,因为是倒叙,所以,默认是第一个 6
$unique = array_unique($maxArr); // 将所有最大值唯一化,主要用于后面的过滤
// 整合后的数据
// $data = array( array(1,3,5), array(3,4,6), array(2,4,6),array(1,4,6), array(2,6), array(1,2,4,6));
// 对数据进行重新统计
$stat = array();
foreach($allArr as $key=>$val){
for($i=1; $i<=$max; $i++){
if(in_array($i, $val)){
if(isset($stat[$i])){
$stat[$i] = $stat[$i]+1;
}else{
$stat[$i] = 1;
}
}
}
}
arsort($stat); // 倒序排列 array(6=>5,4=>4,1=>3,2=>3,3=>2,5=>1)
foreach($stat as $k=>$v){ // 过滤掉最后的那条线的位置
if(in_array($k,$unique)){
unset($stat[$k]);
}
}
// array(4=>4,1=>3,2=>3,3=>2,5=>1)
// 默认只有一个位置的时候
$key = key($stat); // 穿越的位置
$value = current($stat);
$num = count($data)-$value; // 穿越的个数
var_dump($key.‘—–‘.$num); // 4—–2
// 如果是存在多个位置的话,说明空隙值是相同的
$first = $value;
$posArr = array();
foreach($stat as $k=>$v){
if($first == $v){ // 将等于最大空隙值的放入到一个数组里
$posArr[] = $k;
}
}
var_dump($posArr); // 这个打印出来的结果是 array(4);