多维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',
),
),
)