我有一个像这样的数组
$array = array(
1,2,3,'4>12','13.1','13.2','14>30'
);
我想用“>”查找任何值并将其替换为range()。
我想要的结果是
array(
1,2,3,4,5,6,7,8,9,10,11,12, '13.1', '13.2', 14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
);
我的理解:
如果$ array的任何元素中有“>”,
$separate = explode(">", $that_element);
$range_array = range($separate[0], $separate[1]); //makes an array of 4 to 12.
现在以某种方式用$ range_array替换'4> 12'并得到如上例所示的结果。
可能是我可以使用foreach()找到哪个元素中有“>”元素,然后使用array_push()和多级foreach再次重建$ array。寻找更优雅的解决方案。
您甚至可以像这样单线地完成此操作:
$array = array(1,2,3,'4>12','13.1','13.2','14>30');
print_r(array_reduce(
$array,
function($a,$c){return array_merge($a,@range(...array_slice(explode(">","$c>$c"),0,2)));},
[]
));
我避免在爆炸中if
使用range()
的array_slice()
数组上使用任何子句"$c>$c"
(这将始终至少为我提供两个元素的数组)。
您可以在这里找到一些演示:https : //rextester.com/DXPTD44420
编辑:
好的,如果数组还可以包含非数字值,则需要修改该策略:现在,我将检查分隔符是否存在,>
然后将合并由range()
调用创建的某些单元格,或者将非数字元素放入一个数组并将其与原始数组合并:
$array = array(1,2,3,'4>12','13.1','64+2','14>30');
print_r(array_reduce(
$array,
function($a,$c){return array_merge($a,strpos($c,'>')>0?range(...explode(">",$c)):[$c]);},
[]
));
在此处查看更新的演示:https : //rextester.com/BWBYF59990
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句