如果条件匹配,则替换多维数组中的每个字符串

Replace every string in multidimensional array if conditions matched

好的,我有一个像这样的数组,

Array
(
    [0] => Array
    (
        [0] => order_date.Year
        [1] => =
        [2] => 2024
    ),
    [1] => Array
    (
        [0] => order_date.Quarter
        [1] => =
        [2] => 1
    )
)

我想要做的是,在这个多维数组的任何元素中,我想替换任何具有 . 的字符串,并删除 .

之后的所有内容

所以新数组应该是这样的,

Array
(
    [0] => Array
    (
        [0] => order_date
        [1] => =
        [2] => 2024
    ),
    [1] => Array
    (
        [0] => order_date
        [1] => =
        [2] => 1
    )
)

我已经试过了,

foreach ($filter as $key => $value) {
    if(is_array($value)) {
        $variable = substr($value[0], 0, strpos($value[0], "."));
        $value[0] = $variable;
    }
}
print_r($filter);

我得到 $value[0] 作为 order_date 但无法弄清楚如何将它分配给 $filter 数组而不影响数组中的其他值;

$value 变量没有链接到 foreach 循环中的原始数组。 您可以使用符号“&”

来引用原始数组
foreach ($filter as $key => &$value) { ... }

或者您可以使用旧式密钥嵌套

$filter[$key][0] = $variable;

请看这里

这将在 之后取消值。在任何多维数组的每个元素中。

// $in is the source multidimensional array
array_walk_recursive ($in, function(&$item){
    if (!is_array($item)) {
        $item = preg_replace("/\..+$/", "", $item);
    }
});