多维php数组中的替换值

多维php数组中的替换值,php,arrays,regex,Php,Arrays,Regex,首先,我必须说,我已经检查了一些答案,但既不是我想要的,也不是我完全理解答案以及如何使用它 我有一个多维数组: 数组 ( [field_5abcb693a68bc]=>数组 ( [0]=>阵列 ( [field_5abcbb1b51ddf]=>抵押 [字段_5ae58a0b58b58]=> [field_5abcbb1e51de0]=>10 [field_5abcbb2051de1]=>字段 [field_5abcbb2351de2]=>45654456 [field_5abcbb6251de3

首先,我必须说,我已经检查了一些答案,但既不是我想要的,也不是我完全理解答案以及如何使用它

我有一个多维数组:

数组
(
[field_5abcb693a68bc]=>数组
(
[0]=>阵列
(
[field_5abcbb1b51ddf]=>抵押
[字段_5ae58a0b58b58]=>
[field_5abcbb1e51de0]=>10
[field_5abcbb2051de1]=>字段
[field_5abcbb2351de2]=>45654456
[field_5abcbb6251de3]=>
[field_5abcbb6651de4]=>2017年4月
[field_5abcbb6851de5]=>4454656
[field_5abcbb6b51de6]=>2018年7月24日
[field_5abcbbb351de7]=>657
[field_5abcb651de8]=>2018年7月24日
[field_5abcb851de9]=>15
[field_5abcbb51dea]=>是
)
)
)  
我想找到与mm/yyyy模式类似的值。正则表达式是一个很好的选择,我知道如何编写条件:

if ( preg_match('/^\d[1-9]\/[1-9][0-9][0-9][0-9]$/',$v) ) {
   //do stuff
}
我想在数组的内部查找该模式,如果匹配,则将数组中的值更改为

$value = '01/' . $value;
是指“2017年4月”的值更改为“2017年4月1日”
注意:可以更改多个值。
注意:数组[field_5abcb693a68bc]中第一个数组的名称可能会有所不同,在其他情况下不会保持不变。

谢谢。

例如,您可以匿名处理数组的各个级别,而不必知道任何类似于下面的键的名称

foreach ($arr as $key => &$outer) {
    foreach ($outer as &$inner) {
        foreach ($inner as $k => $v) {
            if ( preg_match('/^\d[1-9]\/[1-9][0-9][0-9][0-9]$/',$v) ) {
                $inner[$k] = '01/' . $v;
            }
        }
    }

}
使用with reference to value作为参数,而不是回调的常规值参数

工作原理如下:

array_walk_recursive(
    $array,
    function (&$value) {
        if (preg_match('/^\d[1-9]\/[1-9][0-9][0-9][0-9]$/',$value)) {
            $value = '01/' . $value;
        }
    }
);

检查

的结果是否要使用正则表达式模式执行条件替换
preg_replace()
似乎很合理
preg_replace()
乐于迭代一维数组,因此可以直接为其提供最低级别的服务

请注意,我更改了模式分隔符以避免转义正斜杠。我还通过使用
\d
{3}
量词使模式更加简洁<代码>$0表示“完整字符串匹配”。您不必编写<代码> UNSET()/CUD>调用清除,但一些开发人员认为这是最佳实践,因为它避免了潜在的变量冲突脚本。 代码:()

输出:

array (
  'field_5abcb693a68bc' => 
  array (
    0 => 
    array (
      'field_5abcbb1b51ddf' => 'mortgage',
      'field_5ae58a0b58b58' => '',
      'field_5abcbb1e51de0' => '10',
      'field_5abcbb2051de1' => 'הידגלה',
      'field_5abcbb2351de2' => '45,654,456',
      'field_5abcbb6251de3' => '',
      'field_5abcbb6651de4' => '01/04/2017',
      'field_5abcbb6851de5' => '4,454,656',
      'field_5abcbb6b51de6' => '24/07/2018',
      'field_5abcbbb351de7' => '657',
      'field_5abcbbb651de8' => '24/07/2018',
      'field_5abcbbb851de9' => '15',
      'field_5abcbbbb51dea' => 'yes',
    ),
  ),
)

@谢谢你的提醒。教我发布未经测试的代码:)一个好答案。不知道为什么其他选民错过了这一次。
array (
  'field_5abcb693a68bc' => 
  array (
    0 => 
    array (
      'field_5abcbb1b51ddf' => 'mortgage',
      'field_5ae58a0b58b58' => '',
      'field_5abcbb1e51de0' => '10',
      'field_5abcbb2051de1' => 'הידגלה',
      'field_5abcbb2351de2' => '45,654,456',
      'field_5abcbb6251de3' => '',
      'field_5abcbb6651de4' => '01/04/2017',
      'field_5abcbb6851de5' => '4,454,656',
      'field_5abcbb6b51de6' => '24/07/2018',
      'field_5abcbbb351de7' => '657',
      'field_5abcbbb651de8' => '24/07/2018',
      'field_5abcbbb851de9' => '15',
      'field_5abcbbbb51dea' => 'yes',
    ),
  ),
)