用数字和文本替换数组

时间:2019-08-20 09:32:24

标签: php arrays str-replace

我的代码是一个简单的代码,但我不明白问题可能出在哪里。

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

然后我将这个“'1px','2px',...”设置为数组。 因此,我可以验证文本中何处具有“ px”,然后可以将其替换为“%”。 PS:“%”也是一个数组。

要替换文本,我使用str_replace,它具有功能,但是当我将其与我的代码一起使用时不可以。

implementation "com.google.android.gms:play-services-auth:10.+"
implementation "com.google.android.gms:play-services-identity:10.+"
implementation "com.android.support:support-annotations:27.+"
implementation "com.google.firebase:firebase-core:10.+"
implementation "com.google.firebase:firebase-messaging:10.+"
implementation "com.google.android.gms:play-services-base:10.+"
implementation "com.google.android.gms:play-services-ads:10.+"

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

此代码有效

现在我正在尝试的代码,

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

用文字显示从1到2000的所有数字,例如:“ 274px”, enter image description here

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

通过此过程,它不会将“ px”替换为“%”

enter image description here

5 个答案:

答案 0 :(得分:2)

您可以使用一个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的任何数字;

答案 1 :(得分:1)

如果要使数组不在此循环中,则构建一个数组而不是字符串。

偶然地,每次循环执行$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';
}

答案 2 :(得分:0)

您可以看到here str_replace接受数组“此函数返回一个字符串或一个数组,其中所有出现在主题中的搜索都替换为给定的替换值。” ,但我认为您可以使用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 

答案 3 :(得分:0)

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

$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);

希望这就是您想要的。

答案 4 :(得分:0)

您可以轻松使用str_ireplace

$("#theForm").ajaxSubmit({url: '[some action]',
                          type: 'post',
                          success: function() { window.close(); }})