繁体   English   中英

在数组上使用preg_replace

[英]Using preg_replace on a array

我有一个相对较大的元素数组,我想搜索一个字符串并替换任何匹配。 我目前正在尝试使用preg_replace和正则表达式:

preg_replace("/\d?\dIPT\.\w/", "IPT", $array);

我希望获得与00IPT.A0IPT.A匹配的所有值( 0代表任何数字字符, A代表任何字母)并用IPT替换它们。 但是,我正在获取数组到字符串转换通知。 有没有办法让preg_replace接受一个数组数据源? 如果没有,还有其他方法可以实现吗?

编辑:

文档说preg_replace应该能够接受数组源 - 这就是我要问的原因。

字符串或包含要搜索和替换的字符串的数组。 如果subject是数组,则对主题的每个条目执行搜索和替换,并且返回值也是数组。

如果有帮助(在一个主阵列下有多个数组),该数组是多维的。

preg_replace不会在适当的位置修改。 要永久修改$array ,只需将preg_replace的结果赋给它:

$array = preg_replace("/\d{1,2}IPT\.\w/", "IPT", $array);

适合我。

$array = array('00IPT.A', '0IPT.A');
$array = preg_replace("/\d{1,2}IPT\.\w/", "IPT", $array);
var_dump($array);
// output: array(2) { [0]=> string(3) "IPT" [1]=> string(3) "IPT" }

注意: \\d{1,2}表示一位或两位数。

如果要对二维数组执行此操作,则需要遍历第一维:

$array = array( array('00IPT.A', 'notmatch'), array('neither', '0IPT.A') );    
foreach ($array as &$row) {
    $row = preg_replace("/\d{1,2}IPT\.\w/", "IPT", $row);
}
var_dump($array);

输出:

array(2) { 
    [0]=> array(2) { 
        [0]=> string(3) "IPT" 
        [1]=> string(8) "notmatch" 
    } 
    [1]=> &array(2) { 
        [0]=> string(7) "neither" 
        [1]=> string(3) "IPT" 
    } 
}

请注意,您必须通过引用&$row )遍历每一行否则将不会修改原始数组。

你的$array包含一些其他数组。 preg_replace适用于字符串数组,但不适用于字符串数组[of arrays ...]的数组。

您的值不是作为一个简单的元素在数组中,而是作为一个子集对吗? 像这样?

array (
  array ('id' => 45, 'name' => 'peter', 'whatyouarelookingfor' => '5F'),
  array ('id' => 87, 'name' => 'susan', 'whatyouarelookingfor' => '8C'),
  array ('id' => 92, 'name' => 'frank', 'whatyouarelookingfor' => '9R')
)

如果是这样:

<?php

foreach ($array as $key => $value) {
  $array[$key]['whatyouarelookingfor'] =  
    preg_replace("/\d?\dIPT\.\w/", "IPT", $value['whatyouarelookingfor']);
}

或者如果有更多的元素,那就更广泛了:

<?php

foreach ($array as $key => $value) {
  $array[$key] =  
    preg_replace("/\d?\dIPT\.\w/", "IPT", $value);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM