用数字和文本替换数组

Replace Array with Numbers and text

我的代码很简单,但我不知道问题出在哪里。

我正在执行 "for" 以获取 1 到 2000 之间的数字,然后将数字替换为文本,例如“1px”、“2px”、...

然后我在数组中设置这个“'1px','2px',...”。 出于这个原因,我可以验证文本中的哪里有 "px" ,然后我可以用“%”替换它。 PS: "%" 也是一个数组。

为了替换文本,我使用了 str_replace,它可以正常工作,但当我将它与我的代码一起使用时却没有。

$search = array('150px','151px','152px','153px','154px',...);
$replace = array('100%');
$testes = str_replace($search, $replace, $GetText)

$GetText 示例 - <p><img src="data:image/png;base64,iVBOC" data-filename="andy-brown_4.png" style="width: 150px;"><br></p>

此代码有效

现在我正在尝试的代码,

for($i = 1; $i<=2000; $i++) {
  echo "'". $i . 'px' . "'," ;
  $test = "'". $i . 'px' . "'," ;
}  

用文字显示从 1 到 2000 的所有数字,例如:'274px',

$search = array($test);
$replace = array('100%');
$testes = str_replace($search, $replace, $GetText)

在这个过程中,它不会将 "px" 替换为“%”

如你所见here str_replace accepts array "This function returns a string or an array with all occurrences of search in subject replaced with the given replace value." , but i think in you case you can use preg_replace

$search = []; // define search array
$GetText = '<p><img src="data:image/png;base64,iVBOC" data-filename="andy-brown_4.png" style="width: 150px;"><br></p>';//dummy text
for($i = 1; $i<=2000; $i++) {
   $search[] =  " ". $i . 'px' ; // this will push new element into the array
}  

$testes = str_replace($search, ' 100%', $GetText); // this will change every element from $search array to ' 100%'
var_dump($testes); // returns <p><img src="data:image/png;base64,iVBOC" data-filename="andy-brown_4.png" style="width: 100%;"><br></p>

var_dump(preg_replace('/(\d+)px/i','100%',$GetText));// this will give you the same result 

如果你想要一个数组脱离这个循环,那么构建一个数组而不是一个字符串。

顺便说一下 $test = "'". $i . 'px' . "'," ; 会在每次循环时覆盖 $test 变量,这意味着您最终会在该字符串中得到一个值,即 $test = '2000px'

for($i = 1; $i<=2000; $i++) {
    echo "'". $i . 'px' . "'," ;
    //$test = "'". $i . 'px' . "'," ;
    $test[] = "{$i}px";
}

或者如果您愿意

for($i = 1; $i<=2000; $i++) {
    $test[] = $i . 'px';
}

你想要一个数组,但在这里处理一个字符串:

$test = "'".$i.'px'."',";

这段代码总是重写 $test 字符串,所以 $test 总是等于 '2000px',.

但是你需要像这样填充一个数组:

$test[] =  $i.'px';

请注意,您在这里不需要引号,因为 str_replace 将在文本中查找引号(我相信在大多数情况下它不会找到它们)。

接下来您需要从 2000 到 1,从大到小,因为 str_replace 将替换第一个找到的事件。

如果你有 210px,str_replace 会找到 10px 并用你的 100% 替换它,你会得到 2100%

因此,工作代码可能如下所示:

$GetText = '<p><img src="data:image/png;base64,iVBOC" data-filename="andy-brown_4.png" style="width: 150px;"><br></p>';

$search = array();

for($i = 2000; $i>=1; $i--) {
    $search[] = $i . 'px';
}

$replace = '100%';

$result = str_replace($search, $replace, $GetText);

var_dump($result);

希望这就是您要找的。

您可以轻松地使用 str_ireplace

search = array($test);
$replace = array('100%');
$testes = str_ireplace($search, $replace, $GetText);

您可以使用一个 php 函数解决您的任务 preg_replace

$GetText = '<p><img src="data:image/png;base64,iVBOC" data-filename="andy-brown_4.png" style="width: 150px;"><br></p>';

$result = preg_replace("/\d{1,4}px/","100%",$GetText);

var_dump($result);

\d{1,4}px 的意思是: \d - 搜索数字, {1,4} - 前一个元素(例如数字)必须重复 1 到 4 次, px - 必须跟在这段文字之后,

因此它会查找 *px 之类的所有内容并将其替换为 100%,其中 * 是从 09999 的任意数字;