Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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
PHP从范围为的字符串中获取一个数字数组_Php_Arrays_String_Explode - Fatal编程技术网

PHP从范围为的字符串中获取一个数字数组

PHP从范围为的字符串中获取一个数字数组,php,arrays,string,explode,Php,Arrays,String,Explode,对于我当前的项目,我需要一个用户定义一个存储在数据库中的数字范围 以下字符串是可能的用户输入: 1025-1027,1030,1032-1034 我想用php处理这个字符串,以获得一个可能的数字数组,包括用n-n²添加一系列数字的可能性,或者添加用n分隔的单个数字;n²在本例中: 1025 1026 1027 1030 1032 1031 1034 用逗号分割输入字符串,然后查看新数组的每个元素是什么。如果具有范围分隔符(-),请将范围中的每个数字添加到数组中: $input = '1025

对于我当前的项目,我需要一个用户定义一个存储在数据库中的数字范围

以下字符串是可能的用户输入:

1025-1027,1030,1032-1034
我想用php处理这个字符串,以获得一个可能的数字数组,包括用
n-n²添加一系列数字的可能性
,或者添加用
n分隔的单个数字;n²
在本例中:

1025 1026 1027 1030 1032 1031 1034

用逗号分割输入字符串,然后查看新数组的每个元素是什么。如果具有范围分隔符(
-
),请将范围中的每个数字添加到数组中:

$input = '1025-1027,1030,1032-1034';

$inputArray = explode(',', $input);
$outputArray = array();

foreach($inputArray as $v) {
    if(strpos($v, '-') === false) {
        $outputArray[] = $v;
    } else {
        $minMax = explode('-',$v);

        if($minMax[0]<=$minMax[1]) {
            $outputArray = array_merge($outputArray, range($minMax[0], $minMax[1]));
        }
    }
}

print_r($outputArray);

另一种方法/变体是
分解
-
,然后映射每个分解的组,然后使用
范围
,创建范围后,重新合并分组:

$input = '1025-1027,1030,1032-1034';
// explode, map, explode, create range
$numbers = array_map(function($e){
    $range = explode('-', $e);
    return (count($range) > 1) ? range(min($range), max($range)) : $range;
}, explode(',', $input));
// re merge
$numbers = call_user_func_array('array_merge', $numbers);
print_r($numbers);
$input = '1025-1027,1030,1032-1034';
// explode, map, explode, create range
$numbers = array_map(function($e){
    $range = explode('-', $e);
    return (count($range) > 1) ? range(min($range), max($range)) : $range;
}, explode(',', $input));
// re merge
$numbers = call_user_func_array('array_merge', $numbers);
print_r($numbers);