如何使用方括号中指定的FROM和TO数字用PHP扩展字符串?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了如何使用方括号中指定的FROM和TO数字用PHP扩展字符串?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有字符串http://www.example.COM/images/[1-12].jpg.我想将其扩展为:

这是我的代码

$str = "http://www.example.com/images/[1-12].jpg";
while(preg_match_all("/^([^\\[\\]]*)\\[(\\d+)\\-(\\d+)\\](.*)$/m",$str,$mat)){
$arr = array();
$num = sizeof($mat[0]);
    for($i = 0; $i < $num; $i++){
        for($j = $mat[2][$i]; $j <= $mat[3][$i]; $j++){
        $arr[] = rtrim($mat[1][$i].$j.$mat[4][$i]);
        }
    }
$str = implode(PHP_EOL,$arr);
}

使我将$str更改为更复杂的表达式,它仍然可以正常工作,如下所示:

$str = "http://www.example.com/images/[1-4]/[5-8]/[9-14].jpg";

但遗憾的是,不支持零填充整数.所以,如果我开始

$str = "http://www.example.com/images/[001-004].jpg";

预期结果:

而实际结果如下:

如何更改此行为,以便我的代码产生预期的结果?另外,我的代码的其他缺点是什么?我应该真的使用while循环和PReg_match_all,还是有更快的替代品?

更新:将我的代码的第七行更改为

$arr[] = rtrim($mat[1][$i].@R_126_751@($j,strlen($mat[2][$i]),STR_PAD_LEFT).$mat[4][$i]);

似乎可以做到一点.非常感谢sjagr提出这个建议.我的问题仍然存在,因为我想知道我的代码和更快的替代品(如果有的话)的缺点.

解决方法

根据@ SoumalyoBardhan的要求,我的建议/答案:

如果使用str_pad(),则可以使用匹配找到的strlen()根据匹配字符串的大小强制填充.你对它的使用对我来说很好看:

$arr[] = rtrim($mat[1][$i].str_pad($j,STR_PAD_LEFT).$mat[4][$i]);

我真的看不出还有什么可以用你的代码改进,虽然我不完全理解如何在while语句中使用preg_match_all.

脚本宝典总结

以上是脚本宝典为你收集整理的如何使用方括号中指定的FROM和TO数字用PHP扩展字符串?全部内容,希望文章能够帮你解决如何使用方括号中指定的FROM和TO数字用PHP扩展字符串?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。