分かりやすく、使いやすく。

多次元配列内の全ての文字列を一括で置換する方法

スポンサーリンク

PHP では通常の配列については str_replace で配列内の文字列を一括置換できます。 (参考:配列内の全ての文字列を一括で置換する方法

しかし str_replace は多次元配列には対応していない為、多次元配列内の文字列を一括置換するには別の方法を考える必要があります。

PHP で多次元配列の全ての文字列を一括で置換する方法の一つとして、 array_walk_recursive を使用する方法があります。 array_walk_recursive は配列を再帰的に探索し、第二引数で渡されたコールバック関数を適用します。

サンプルコードは次の通りです。

php(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ary = array(
           array('AABBCC', 'BBCCDD', 'CCDDEE'),
           array('CCCCCC', 'CCCCAA', 'CCAAAA'),
           array('CCAACC', 'ABCDEF', 'AACCCC'),
           array(
               array('CCAA', 'BBCC', 'CCDD'),
               array('ACCA', 'BCCB'),
               array(
                   array('AA'),
                   array('CC')
               ),
           )
       );
 
//多次元配列を再帰的に処理して 'CC' をすべて '**' に置き換える。
array_walk_recursive($ary, function (&$val, $key) {
    $val = str_replace('CC', '**', $val);
});
 
var_dump($ary); 

上記の実行結果は次の通りです。

array(4) {
  [0]=>
  array(3) {
    [0]=>
    string(6) "AABB**"
    [1]=>
    string(6) "BB**DD"
    [2]=>
    string(6) "**DDEE"
  }
  [1]=>
  array(3) {
    [0]=>
    string(6) "******"
    [1]=>
    string(6) "****AA"
    [2]=>
    string(6) "**AAAA"
  }
  [2]=>
  array(3) {
    [0]=>
    string(6) "**AA**"
    [1]=>
    string(6) "ABCDEF"
    [2]=>
    string(6) "AA****"
  }
  [3]=>
  array(3) {
    [0]=>
    array(3) {
      [0]=>
      string(4) "**AA"
      [1]=>
      string(4) "BB**"
      [2]=>
      string(4) "**DD"
    }
    [1]=>
    array(2) {
      [0]=>
      string(4) "A**A"
      [1]=>
      string(4) "B**B"
    }
    [2]=>
    array(2) {
      [0]=>
      array(1) {
        [0]=>
        string(2) "AA"
      }
      [1]=>
      array(1) {
        [0]=>
        string(2) "**"
      }
    }
  }
} 
スポンサーリンク
スポンサーリンク