我试图规范/展开/水合物/转换一个数字字符串以及连字符分隔的数字(作为范围表达式),以便它成为一个整数值数组。
样本输入:
$array = ["1","2","5-10","15-20"];
应成为:
$array = [1,2,5,6,7,8,9,10,15,16,17,18,19,20];
我正在研究的算法是:
//get the array values with a range in it :
$rangeArray = preg_grep('[-]',$array);
这将包含["5-10", "16-20"];
:
foreach($rangeArray as $index=>$value){
$rangeVal = explode('-',$value);
$convertedArray = range($rangeVal[0],$rangeVal[1]);
}
转换后的数组现在将包含"5“、"6”、"7“、"8”、"9“、"10";
我现在面临的问题是,如何在原始数组中弹出"5-10“值,并在$convertedArray,中插入这些值,这样我就有了这个值:
$array = ["1","2",**"5","6","7","8","9","10"**,"16-20"];
如何插入一个或多个值来代替范围字符串?或者,是否有一种更干净的方法将数字和范围值的数组转换为正确排序的数字数组?
发布于 2015-07-02 09:21:59
尝试如下:
<?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>";
结果:
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
)
问题解决了!
发布于 2015-07-02 09:21:53
这就是你要的。我尽量将代码最小化。
考虑下面的初始数组,
$array = ["1","2","5-10","15-20"];
如果您想要用它而不是$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));
现在,$array
变成,
$array = [1,2,5,6,7,8,9,10,15,16,17,18,19,20];
备注:
15-20-25
,则将15-20
考虑在内,而忽略其余的15a-20b
,将其作为15-20
处理,这是-
爆炸后将套管改为整数的结果,15a
变为15
。0
开始的数字升序。发布于 2015-07-02 09:17:22
简单而简短的答案。
见“理想国”
$new_array = array();
foreach($array as $number){
if(strpos($number,'-')){
$range = explode('-', $number);
$new_array = array_merge($new_array, range($range[0],$range[1]));
}
else{
$new_array[] = (int) $number;
}
}
var_dump($new_array);
https://stackoverflow.com/questions/31180277
复制相似问题