求算法一个(有难度) 有一个一维数组要求取出$a中相连元素的组数,及每一组的元素.如$a=array(5,6,7,12,15,16,20);应该得到:组数为:2;每一组的元素为:第一组(5,6,7);第二组(15,16); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 $a=array(5,6,7,12,15,16,20);$arr = array();$j = 0;for($i=0;$i<count($a);$i++){ if($a[$i-1]) { if($a[$i] - $a[$i-1] == 1) { if(!in_array($a[$i-1],(array)$arr[$j])) $arr[$j][] = $a[$i-1]; $arr[$j][] = $a[$i]; } else { $j++; } }}print_r(array_values($arr)); 傻了,改一下$a=array(5,6,7,12,15,16,20);$arr = array();$j = 0;for($i=1;$i<count($a);$i++){if($a[$i] - $a[$i-1] == 1){if(!in_array($a[$i-1],(array)$arr[$j])) $arr[$j][] = $a[$i-1];$arr[$j][] = $a[$i];}else{$j++;}}print_r(array_values($arr)); <?php$a=array(5,6,7,12,15,16,20);$begin = -1;$out = array();for ($n=0; $n < count($a); $n++) { if ($a[$n] !== $a[$n+1]-1) { if ($begin != -1 && ($n >= 1 || !isset($a[$n+1]))){ $out[] = array_slice($a, $begin, max($n-$begin+1, -1)); $begin = -1; } } else if ($begin == -1) { $begin = $n; }}print_r($out);?> <?php$a=array(5,6,7);$begin = -1;$out = array();for ($n=0; $n < count($a); $n++) { if ($a[$n] !== $a[$n+1]-1) { if ($begin != -1 && $n > 0 ){ $out[] = array_slice($a, $begin, $n-$begin+1); $begin = -1; } } else if ($begin == -1) { $begin = $n; }}print_r($out);?> 这个是最精简的了。。之前写的遗留了之前那个程序的部分残肢<?php$a=array(5,6,7,12,15,16,20);$begin = -1;$out = array();for ($n=0; $n < count($a); $n++) {if ($a[$n] !== $a[$n+1]-1) { if ($begin != -1) { $out[] = array_slice($a, $begin, $n-$begin+1); $begin = -1; }} else if ($begin == -1) {$begin = $n;}}print_r($out);?> $a = array(5,6,7,12,15,16,20);$t = array();foreach($a as $v) { if($v != $k) { if(count($t) > 1) { $o[] = $t; } $t = array(); } $t[] = $v; $k = $v+1;}print_r($o); 游戏之作:) (实际使用请参考楼上唠叨的)$a=array(5,6,7,12,15,16,20);$results=array();do{ $c=array_intersect_assoc($a, range($a[0],$a[count($a)-1]) ); if(count($c)>1) $results[]=$c; $a=array_values(array_diff($a,$c));}while( !empty($c) && !empty($a) );print_r($results); 唠叨老大的有BUG~~$a = array(5,6,7); $a = array(5,6,7,12,15,16,20);$t = array();foreach($a as $v) { if($v != $k) { if(count($t) > 1) { $o[] = $t; } $t = array(); } $t[] = $v; $k = $v+1;}/* 是的,要加上这段 */if(count($t) > 1) { $o[] = $t;}print_r($o); 呵呵,老大来了,我的继续修剪一下.================================$a=array(5,6,7,12,15,16,20);$j = 0;for($i=1;$i<count($a);$i++){ if($a[$i] - $a[$i-1] == 1) { if($arr[$j] == '') $arr[$j][] = $a[$i-1]; $arr[$j][] = $a[$i]; } else $j = count($arr);}print_r($arr); 恩,老大说得对.再改改.====================$a=array('t'=>5,6,'x'=>7,12,'y'=>15,16,5,20,21);$j = 0;foreach($a as $k=>$v){ $n = next($a); if( $n - $v == 1 ) { $arr[$j] == '' ? $arr[$j][] = $v.'|'.'key is: "'.$k.'"' : ''; $arr[$j][] = $n.'|'.'key is: "'.key($a).'"'; } else $j = count($arr);}print_r($arr); php 中使用like时 怎么不区分大小写? 请问关于csdn 的问题 求一条SQL语句 读取信息如何格式化 求大神帮看下这段代码 ,上传图片成功,但是找不到图片? 请问如何将一个php文件的执行结果赋值给一个变量? 在学做论坛时,做一个类似于解析UBBCode的函数时遇到了困难。 一段对mysql数据库查询语句的问题 上传后图片显示的要么不完整,要么质量下降,是什么原因。 请各位老哥帮我解决身份验证不能登陆的问题,给300分? a开头b结尾 中间不要存在 单词 ab 的 正则?谁帮忙。不要 替换哦! 在做PHP无限分类的时候,我用的是ajax,效果已经实现了,但是显示不出来
$arr = array();
$j = 0;
for($i=0;$i<count($a);$i++)
{
if($a[$i-1])
{
if($a[$i] - $a[$i-1] == 1)
{
if(!in_array($a[$i-1],(array)$arr[$j])) $arr[$j][] = $a[$i-1];
$arr[$j][] = $a[$i];
}
else
{
$j++;
}
}
}
print_r(array_values($arr));
$arr = array();
$j = 0;
for($i=1;$i<count($a);$i++)
{if($a[$i] - $a[$i-1] == 1)
{
if(!in_array($a[$i-1],(array)$arr[$j])) $arr[$j][] = $a[$i-1];
$arr[$j][] = $a[$i];
}
else
{
$j++;
}
}
print_r(array_values($arr));
$a=array(5,6,7,12,15,16,20);
$begin = -1;
$out = array();
for ($n=0; $n < count($a); $n++) {
if ($a[$n] !== $a[$n+1]-1) {
if ($begin != -1 && ($n >= 1 || !isset($a[$n+1]))){
$out[] = array_slice($a, $begin, max($n-$begin+1, -1));
$begin = -1;
}
} else if ($begin == -1) {
$begin = $n;
}
}
print_r($out);
?>
$a=array(5,6,7);
$begin = -1;
$out = array();
for ($n=0; $n < count($a); $n++) {
if ($a[$n] !== $a[$n+1]-1) {
if ($begin != -1 && $n > 0 ){
$out[] = array_slice($a, $begin, $n-$begin+1);
$begin = -1;
}
} else if ($begin == -1) {
$begin = $n;
}
}
print_r($out);
?>
<?php
$a=array(5,6,7,12,15,16,20);
$begin = -1;
$out = array();
for ($n=0; $n < count($a); $n++) {
if ($a[$n] !== $a[$n+1]-1) {
if ($begin != -1) {
$out[] = array_slice($a, $begin, $n-$begin+1);
$begin = -1;
}
} else if ($begin == -1) {
$begin = $n;
}
}
print_r($out);
?>
$t = array();
foreach($a as $v) {
if($v != $k) {
if(count($t) > 1) {
$o[] = $t;
}
$t = array();
}
$t[] = $v;
$k = $v+1;
}
print_r($o);
$a=array(5,6,7,12,15,16,20);
$results=array();do{
$c=array_intersect_assoc($a, range($a[0],$a[count($a)-1]) );
if(count($c)>1) $results[]=$c;
$a=array_values(array_diff($a,$c));
}while( !empty($c) && !empty($a) );print_r($results);
$a = array(5,6,7);
$t = array();
foreach($a as $v) {
if($v != $k) {
if(count($t) > 1) {
$o[] = $t;
}
$t = array();
}
$t[] = $v;
$k = $v+1;
}/* 是的,要加上这段 */
if(count($t) > 1) {
$o[] = $t;
}print_r($o);
================================
$a=array(5,6,7,12,15,16,20);
$j = 0;
for($i=1;$i<count($a);$i++)
{
if($a[$i] - $a[$i-1] == 1)
{
if($arr[$j] == '') $arr[$j][] = $a[$i-1];
$arr[$j][] = $a[$i];
}
else $j = count($arr);
}
print_r($arr);
再改改.
====================
$a=array('t'=>5,6,'x'=>7,12,'y'=>15,16,5,20,21);
$j = 0;
foreach($a as $k=>$v)
{
$n = next($a);
if( $n - $v == 1 )
{
$arr[$j] == '' ? $arr[$j][] = $v.'|'.'key is: "'.$k.'"' : '';
$arr[$j][] = $n.'|'.'key is: "'.key($a).'"';
}
else $j = count($arr);
}
print_r($arr);