我有一个相对较大的元素数组,我想搜索一个字符串并替换任何匹配项。我目前正尝试使用preg_replace
和正则表达式执行此操作:
preg_replace("/\d?\dIPT\.\w/", "IPT", $array);
我希望获得与00IPT.A
或0IPT.A
匹配的所有值(0
代表任何数字字符,A
代表任何字母)并将其替换为{{ 1}}。但是,我正在获取数组到字符串转换通知。有没有办法让IPT
接受数组数据源?如果没有,还有其他方法可以达到这个目的吗?
修改
文档说preg_replace
应该能够接受数组来源 - 这就是我要问的原因。
字符串或包含要搜索和替换的字符串的数组。 如果subject是一个数组,则对主题的每个条目执行搜索和替换,返回值也是一个数组。
如果有帮助,阵列是多维的(在一个主阵列下有多个阵列)。
答案 0 :(得分:9)
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
),否则原始数组将不会被修改。
答案 1 :(得分:1)
您的$array
包含一些其他数组。 preg_replace
适用于字符串数组,但不适用于数组[数组...]数组的数组。
答案 2 :(得分:0)
您的值不是作为一个简单元素在数组中,而是作为子集对吗?像这样?
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);
}