用数组键中的通配符替换字符串值(例如:width = * => width = 100)

时间:2019-01-23 14:41:11

标签: php arrays

我们从服务器检索了很多图像,所有这些尺寸都是随机的。我们需要使它们相同。

如果我知道固定大小,则发布的代码会很好用,但是我希望它可以长期运行,即使源更改了字符串文件的宽度也是如此。

我搜索了一会儿,发现一些具有完整功能的代码可能使之成为可能,但是在数组键中只有一个通配符的情况下什么都没有。

这不是一种选择吗?

我尝试使用*,\ d +和其他一些正则表达式变量,但失败了。

function resize ($width = '150'){
$raw_img_src = http://longurl/img.file?width=[random];
$replace_sizes = array("width=[random]" => "width=$width");
$img_src = strtr($raw_img_src, $replace_sizes);
}

最终结果应该在 http://longurl/img.file?width=123; 应该改成 http://longurl/img.file?width=150;

谢谢。

更新:这两个都是很好的答案,谢谢。我们选了最短的一个。

// OR
$img_src = preg_replace('#\bwidth=\d+#', "width=$width", $raw_img_src);
$img_src = preg_replace('#\bheight=\d+#', "height=$height", $img_src);
$img_src = rawurlencode($img_src);

// OR
$parts = parse_url($raw_img_src);
$uri_parts = explode('?', $raw_img_src)[0];
parse_str($parts['query'], $query);
$query['width'] = $width;
$query['height'] = $height;
$img_src = $uri_parts.'?'.http_build_query($query);
$img_src = rawurlencode($img_src);

2 个答案:

答案 0 :(得分:2)

您可以使用正则表达式,但是不使用任何 regex 的方式如何。网址中的width参数不需要任何特定的顺序。另外,您可以更好地控制参数以进行修改。

<?php
$url = 'http://longurl/img.file?width=123&name=kim';
$parts = parse_url($url);
$uri_parts = explode('?', $url)[0];
parse_str($parts['query'], $query);
$query['width'] = 150;
echo $uri_parts.'?'.http_build_query($query);
?>

输出:

http://longurl/img.file?width=150&name=kim

演示: https://3v4l.org/rImeg

答案 1 :(得分:1)

不确定您的需求:

function resize ($width = '150'){
    $raw_img_src = 'http://longurl/img.file?width=[random]';
    $img_src = preg_replace('#width=\[random\]#', "width=$width", $raw_img_src);
}

但是如果[random]是实际宽度,则可能是这样:

function resize ($width = '150'){
    // by example http://longurl/img.file?width=512
    $raw_img_src = 'http://longurl/img.file?width=[random]';
    $img_src = preg_replace('#width=\d+#', "width=$width", $raw_img_src);
}

如果您想使用[],请考虑使用引号,所有特殊字符都必须用引号引起来: http://php.net/manual/fr/function.preg-quote.php