用多个值替换数组值

Sahriar Saikat |

我有一个像这样的数组

$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。寻找更优雅的解决方案。

汽车10分钟

您甚至可以像这样单线地完成此操作:

$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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章