PHP:将数组插入另一个数组

muf*_*fin 13 php arrays insert arraylist array-merge

我正在尝试规范化一串以逗号分隔的数字和一个范围.展示:

数组:

$array = ["1","2","5-10","15-20"];
Run Code Online (Sandbox Code Playgroud)

应成为:

$array = [1,2,5,6,7,8,9,10,15,16,17,18,19,20];
Run Code Online (Sandbox Code Playgroud)

我正在研究的算法是:

//get the array values with a range in it :
$rangeArray = preg_grep('[-]',$array);
Run Code Online (Sandbox Code Playgroud)

这将包含["5-10", "16-20"];Then:

foreach($rangeArray as $index=>$value){
    $rangeVal = explode('-',$value);
    $convertedArray = range($rangeVal[0],$rangeVal[1]);
}
Run Code Online (Sandbox Code Playgroud)

转换后的数组现在包含["5","6","7","8","9","10"] ;

我现在面临的问题是,如何在原始数组中弹出值"5-10",并在$ convertedArray中插入值,以便我将获得值:

$ array = ["1","2","5","6","7","8","9","10","16-20"];

那么,如何将数组插入数组?或者有更清洁的方法来解决这类问题吗?将数字和范围值的数组转换为正确排序的数字数组?

Vir*_*ral 5

干得好。我试图尽量减少代码。

考虑下面的初始数组,

$array = ["1","2","5-10","15-20"];
Run Code Online (Sandbox Code Playgroud)

如果您要根据它创建一个新数组$array,请在第一次出现的位置下方更改$array为所需的任何名称,

$array = call_user_func_array('array_merge', array_map(function($value) {
            if(1 == count($explode = explode('-', $value, 2))) {
                return [(int)$value];
            }
            return range((int)$explode[0], (int)$explode[1]);
        }, $array));
Run Code Online (Sandbox Code Playgroud)

现在,$array成为

$array = [1,2,5,6,7,8,9,10,15,16,17,18,19,20];
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 将每个转换成员转换为整数
  • 如果15-20-25提供,则15-20考虑并忽略其余部分
  • 如果15a-20b提供,则视为15-20,这是用爆炸后将其转换为整数的结果-15a变为15
  • 从以下开始将数组键转换为数字升序 0
  • 仅当给定数组按单个成员和范围成员组合的升序排列时,才对新数组进行排序


Jos*_*ano 5

试试这个:

<?php
$array = ["1","2","5-10","15-20"];

$newdata = array();
foreach($array as $data){
    if(strpos($data,'-')){

        $range = explode('-', $data);
        for($i=$range[0];$i<=$range[1];$i++){
            array_push($newdata, $i);
        }
    }
    else{
        array_push($newdata, (int)$data);
    }

}

        echo "<pre>";
print_r($array);
        echo "</pre>";
        echo "<pre>";
print_r($newdata);
        echo "</pre>";
Run Code Online (Sandbox Code Playgroud)

结果:

Array
(
    [0] => 1
    [1] => 2
    [2] => 5-10
    [3] => 15-20
)
Array
(
    [0] => 1
    [1] => 2
    [2] => 5
    [3] => 6
    [4] => 7
    [5] => 8
    [6] => 9
    [7] => 10
    [8] => 15
    [9] => 16
    [10] => 17
    [11] => 18
    [12] => 19
    [13] => 20
)
Run Code Online (Sandbox Code Playgroud)

问题解决了!