值为range或no时将php数组拆分为组
我有如下数组值:值为range或no时将php数组拆分为组,php,arrays,Php,Arrays,我有如下数组值: $src = array(3,15,16,17,18,20,25,7); 我如何将其分为: array( [0] => 3, [1] => array([0] => 15, [1] => 18),//when value is range get start and end [2] => 20, [3] => 25, [4] => ); 检查此代码。如果序列/范围差异仅基于下一个数字,则此
$src = array(3,15,16,17,18,20,25,7);
我如何将其分为:
array(
[0] => 3,
[1] => array([0] => 15, [1] => 18),//when value is range get start and end
[2] => 20,
[3] => 25,
[4] =>
);
检查此代码。如果序列/范围差异仅基于下一个数字,则此代码适用于您
<?php
$src = array(3,15,16,17,18,20,25,7);
$tot = count($src);
$resarr = array();
$st = $ed = '';
for($i=0;$i<$tot;$i++){
if($st==''){
if(isset($src[$i+1]) && $src[$i+1] == $src[$i]+1){
$st = $src[$i];
}
}
else{
if(!isset($src[$i+1]) || $src[$i+1] != $src[$i]+1){
$ed=$src[$i];
}
}
if($st=='' && $ed==''){
$resarr[] = $src[$i];
}
elseif($st!='' && $ed!=''){
$resarr[] = array($st,$ed);
$st = $ed='';
}
}
print_r($src);
echo "<pre>";print_r($resarr);echo "</pre>";
?>
这里还有一个phpfiddle示例。坚持练习,写出你自己的逻辑 检查此代码。如果序列/范围差异仅基于下一个数字,则此代码适用于您
<?php
$src = array(3,15,16,17,18,20,25,7);
$tot = count($src);
$resarr = array();
$st = $ed = '';
for($i=0;$i<$tot;$i++){
if($st==''){
if(isset($src[$i+1]) && $src[$i+1] == $src[$i]+1){
$st = $src[$i];
}
}
else{
if(!isset($src[$i+1]) || $src[$i+1] != $src[$i]+1){
$ed=$src[$i];
}
}
if($st=='' && $ed==''){
$resarr[] = $src[$i];
}
elseif($st!='' && $ed!=''){
$resarr[] = array($st,$ed);
$st = $ed='';
}
}
print_r($src);
echo "<pre>";print_r($resarr);echo "</pre>";
?>
<?php
$src = array(3,4,15,16,17,18,20,25,7,8);
$res = [];
$start = null;
//Rather than make a counter use a for loop
for($i=0; $i < count($src); $i++){
//Make sure i+1 is not bigger than array
//If current index value + 1
//Euqals the next index value we have a range
if($i+1 < count($src) && $src[$i]+1 == $src[$i+1]){
if($start === null){
$start = $i;
}
//Once the range is over we can use the current index as end
} elseif($start !== null){
$res[] = array($src[$start], $src[$i]);
$start = null;
$end = null;
//There was never a range.
} else {
$res[] = $src[$i];
}
}
echo "<pre>";
print_r($res);
这里还有一个phpfiddle示例。坚持练习,写出你自己的逻辑 //复制数组并将其移动到一个项目。
<?php
$src = array(3,4,15,16,17,18,20,25,7,8);
$res = [];
$start = null;
//Rather than make a counter use a for loop
for($i=0; $i < count($src); $i++){
//Make sure i+1 is not bigger than array
//If current index value + 1
//Euqals the next index value we have a range
if($i+1 < count($src) && $src[$i]+1 == $src[$i+1]){
if($start === null){
$start = $i;
}
//Once the range is over we can use the current index as end
} elseif($start !== null){
$res[] = array($src[$start], $src[$i]);
$start = null;
$end = null;
//There was never a range.
} else {
$res[] = $src[$i];
}
}
echo "<pre>";
print_r($res);
//为了节省数组长度,在数组末尾添加一个元素。
//它可以是任何数字,但不能是连续序列。
//我添加源数组的最后一项
$src1=$src;
数组移位($src1);
数组推送($src1,end($src));
//然后减去数组中相应的项
$temp=array_map(函数($i,$j){return$j-$i;},$src,$src1);
//看看数组
//$src 3,15,16,17,18,20,25,7
//$12,1,1,1,2,5,-18,0,
//如您所见,序列的所有元素,但最后一个,在'temp'数组中都有1个。
//因此,我们只需要收集结果
$sarr=假;
$result=array();
对于($i=0;$i//复制数组并将其移到一个项目。
//为了节省数组长度,在数组末尾添加一个元素。
//它可以是任何数字,但不能是连续序列。
//我添加源数组的最后一项
$src1=$src;
数组移位($src1);
数组推送($src1,end($src));
//然后减去数组中相应的项
$temp=array_map(函数($i,$j){return$j-$i;},$src,$src1);
//看看数组
//$src 3,15,16,17,18,20,25,7
//$12,1,1,1,2,5,-18,0,
//如您所见,序列的所有元素,但最后一个,在'temp'数组中都有1个。
//因此,我们只需要收集结果
$sarr=假;
$result=array();
对于($i=0;$i我添加了一些值,只是为了覆盖边缘情况。注释解释
Array
(
[0] => Array
(
[0] => 3
[1] => 4
)
[1] => Array
(
[0] => 15
[1] => 18
)
[2] => 20
[3] => 25
[4] => Array
(
[0] => 7
[1] => 8
)
)
我添加了一些值只是为了覆盖边缘情况。注释解释
Array
(
[0] => Array
(
[0] => 3
[1] => 4
)
[1] => Array
(
[0] => 15
[1] => 18
)
[2] => 20
[3] => 25
[4] => Array
(
[0] => 7
[1] => 8
)
)
我不理解这个问题。你能重述一下这个问题吗?这个问题不清楚。详细说明你的问题基本上,他问的是…如果输入是1,2,3,4,5,他希望它是[0]=>1[1]=>5
。我的问题是如果你有一个案例,你的序列是1,3,4,20
,你想让它成为[0]=>3[1]=>4
或者只是3,4
?@Dimi,他没有说so@Dimi正确..当序列为1,3,4,20时,我希望它为[0]=>1,[1]=>array([0]=>3,[1]=>4),[2]=>20我不理解这个问题。你能重述一下这个问题吗?这个问题不清楚。详细说明你的问题基本上,他问的是…如果输入是1,2,3,4,5,他希望它是[0]=>1[1]=>5
。我的问题是,如果你有一个案例,你的序列是1,3,4,20
,你想把它作为[0]=>3[1]=>4
或者只是3,4
?@Dimi,他没有说so@Dimi正确..当序列为1,3,4,20时,我希望它为[0]=>1,[1]=>array([0]=>3,[1]=>4),[2]=>20