簡體   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