如何在PHP中压缩整数数组?
因此,我有一个整数数组:如何在PHP中压缩整数数组?,php,arrays,Php,Arrays,因此,我有一个整数数组:,我想以这种格式将其连接在一起: 我是PHP新手,尝试通过循环数组来实现这一点: function pasteTogether($val) { $newVals = array(); $min = $val[0]; $max = $val[1]; $counter = 0; for ($i = 0; $i < count($val); $i++) {
,我想以这种格式将其连接在一起:
我是PHP新手,尝试通过循环数组来实现这一点:
function pasteTogether($val)
{
$newVals = array();
$min = $val[0];
$max = $val[1];
$counter = 0;
for ($i = 0; $i < count($val); $i++)
{
if ($val[$i + 1] === $val[$i] + 1)
{
$max = $val[$i + 1];
}
else
{
$tempVal = $min."-".$max;
$newVals[$counter] = $tempVal;
$counter++;
$min = $val[$i];
}
}
return $newVals;
}
函数粘贴在一起($val)
{
$newVals=array();
$min=$val[0];
$max=$val[1];
$counter=0;
对于($i=0;$i
然而,当我运行这段代码时,我得到了PHP致命错误:第36行的../learning.PHP中超过了30秒的最大执行时间 因为for循环永远不会结束,所以您会增加$val而不是$i
$array = array(1, 2, 3, 9, 10, 11, 14);
function pasteTogether($val)
{
$newVals = array();
$min = $val[0];
$max = $val[1];
$counter = 0;
for ($i = 0; $i < count($val); $i++)
{
if ($val[$i + 1] === $val[$i] + 1)
{
$max = $val[$i + 1];
}
else
{
$tempVal = $min."-".$max;
$newVals[$counter] = $tempVal;
$counter++;
$min = $val[$i];
}
}
return $newVals;
}
pasteTogether($array);
$array=array(1,2,3,9,10,11,14);
函数粘贴在一起($val)
{
$newVals=array();
$min=$val[0];
$max=$val[1];
$counter=0;
对于($i=0;$i
我一直在研究这个有趣的问题,并找到了另一个解决方案。因此,如果有人感兴趣:
$arr=array(1, 2, 3, 9, 10, 11, 14, 15, 16, 18);
$v0=$dif=null;$rows=array();
foreach ($arr as $i => $v) {
if ($dif!=($d=($v-$i))){
if ($v0) $rows[]="$v0-".$arr[$i-1];
$v0=$v;
$dif=$d;
}
}
$rows[]="$v0-".($d==$dif?$arr[$i]:$v0);
print_r($rows);
我在数组中添加了一些数字,结果如下:
$rows = Array
(
[0] => 1-3
[1] => 9-11
[2] => 14-16
[3] => 18-18
)
您可以在这里找到一个小演示:这很有效:
function pasteTogether($val)
{
$compacted = [];
$min = null;
$max = null;
$format = function ($a, $b) {
return ($a < $b ? "$a-$b" : $a);
};
foreach ($val as $current) {
if ($min === null) {
$min = $current;
$max = $current - 1;
}
if ($current == $max + 1) {
$max++;
} else {
$compacted[] = $format($min, $max);
$min = $current;
$max = $current;
}
}
$compacted[] = $format($min, $max);
return $compacted;
}
echo '<', implode(', ', pasteTogether([1, 2, 3, 9, 10, 11, 14])), '>';
函数粘贴在一起($val)
{
美元=[];
$min=null;
$max=null;
$format=函数($a,$b){
回报($a<$b?$a-$b):$a);
};
foreach($val作为$current){
如果($min==null){
$min=$current;
$max=$current-1;
}
如果($current==$max+1){
$max++;
}否则{
$compressed[]=$format($min,$max);
$min=$current;
$max=$current;
}
}
$compressed[]=$format($min,$max);
返回$1;
}
回声';
输出:
对我来说,输出是这样的:
注意:未定义的偏移量:第10行的/var/www/html/ehm.php中的7
,print\r
给出了这样的结果:数组([0]=>1-3[1]=>3-11[2]=>11-11)
忘记添加了,这是在修复迭代器之后(你增加$val
而不是$i
)哇,我真是个傻瓜。嗯,我想我还有一些工作要做,因为输出不太正确。那个$val的事是个愚蠢的错误。谢谢