Php Preg_用数组替换字符串?

问题描述 投票:0回答:3

我在使用 PHP preg_replace 时遇到一些问题。

我有一个包含添加数字的图像网址的网址,例如:

$url = http://example.com/111.jpg,121,122,123,124,125,126

最后的数字总是不同的。

为了分离刺痛,我正在使用

$parts = 爆炸(",", $url);

为了计算有多少个数字,我使用:

$数字 = 计数($零件);

我的问题是用$parts替换$url[0]的末尾(从parts[1]开始到parts[$numbers-1])

知道我需要改变什么吗?

这是我的代码:

for($i=1;$i<=10;$i++) {
   $array[] = preg_replace('/\d+.jpg/',sprintf("%01d.jpg",$i),$url[0]);
}

<img src="<?php echo($array[0]); ?>"/>
<img src="<?php echo($array[1]); ?>"/>
<img src="<?php echo($array[2]); ?>"/>
<img src="<?php echo($array[3]); ?>"/>
<img src="<?php echo($array[4]); ?>"/>
<img src="<?php echo($array[5]); ?>"/>
<img src="<?php echo($array[6]); ?>"/>
<img src="<?php echo($array[7]); ?>"/>
<img src="<?php echo($array[8]); ?>"/>
<img src="<?php echo($array[9]); ?>"/>
php arrays preg-replace
3个回答
2
投票

尝试

$array[] = preg_replace('/\d+.jpg/', "{$url[$i]}.jpg"), $url[0]);

这将一次取出一个尾随数字。您的原始版本正在替换为循环计数器,这几乎肯定不会与尾随数字相同。

你的正在产生

http://example.com/001.jpg
http://example.com/002.jpg
etc...

你想要

http://example.com/121.jpg
http://example.com/122.jpg
etc...

0
投票
$url   = 'http://example.com/111.jpg,121,122,123,124,125,126';
$parts = explode(',', $url);
$url   = array_shift($parts);

$parts_count = count($parts);
for($i=0; $i<$parts_count; $i++) {
  $array[] = preg_replace('/\d+.jpg/', sprintf("%d.jpg", $parts[$i]), $url);
}

var_dump($array);

输出

array(6) {
  [0]=>
  string(26) "http://example.com/121.jpg"
  [1]=>
  string(26) "http://example.com/122.jpg"
  [2]=>
  string(26) "http://example.com/123.jpg"
  [3]=>
  string(26) "http://example.com/124.jpg"
  [4]=>
  string(26) "http://example.com/125.jpg"
  [5]=>
  string(26) "http://example.com/126.jpg"
}

0
投票

您可以将分解的字符串传递到

preg_replace_callback()
并缓存第一个元素的前导和尾随子字符串,以便在后续元素中使用。 演示

var_export(
    preg_replace_callback(
        '#(\D*)(\d+)(\D*)#',
        function($m) {
            static $url = $m[1];
            static $suffix = $m[3];
            return "$url{$m[2]}$suffix";
        },
        explode(',', $url)
    )
);

或者从 PHP7.4 到 PHP8.2:演示

var_export(
    preg_replace_callback(
        '#(\D*)(\d+)(\D*)#',
        function($m) {
            static $url, $suffix;
            $url ??= $m[1];
            $suffix ??= $m[3];
            return "$url{$m[2]}$suffix";
        },
        explode(',', $url)
    )
);
© www.soinside.com 2019 - 2024. All rights reserved.