Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
值为range或no时将php数组拆分为组_Php_Arrays - Fatal编程技术网

值为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