替换二维数组列值中的子字符串

问题描述 投票:0回答:4

我有一个像这样的数组设置:

Array
(
[0] => Array
    (
        [value1] => John Doe
        [value2] => Father
        [value3] => 
        [value4] => http://www.website.my.com
        [value5] => 
        [value6] => 
    )

[1] => Array
    (
        [value1] => Jane Doe
        [value2] => Mother
        [value3] => 
        [value4] => http://www.website.my.com
        [value5] => 
        [value6] => 
    )

[2] => Array
    (
        [value1] => Sara Smith
        [value2] => Daughter
        [value3] => 
        [value4] => http://www.website.my.com
        [value5] => 
        [value6] => 
    )
)

我正在尝试使用

str_replace()
删除“我的”。在这些数组的 value4 字段之外。
str_replace("my.", "", $myarray);
但它没有改变任何东西。
str_replace()
是否适用于二维数组?

php arrays multidimensional-array replace
4个回答
8
投票

不,它适用于字符串或一维数组....您可以通过 array_walk_recursive 中的回调使用它

array_walk_recursive(
    $myarray,
    function (&$value) {
        $value = str_replace('.my', '', $value);
    }
);

4
投票

您可以使用

array_walk_recursive()
http://php.net/manual/en/function.array-walk-recursive.php对每个子元素执行替换(注意:回调仅针对leafs触发(非数组)):

$myArray = array(0 => "my.test", 2=> array("test" => "my.thing"));

array_walk_recursive($myArray, "removeMy");

function removeMy(&$element, $index){
   $element = str_replace("my.", "", $element);
}


print_r($myArray); // Array ( [0] => test [2] => Array ( [test] => thing ) ) 

如果替换只应出现在

value4
键上-将其添加为条件:

function removeMy(&$element, $index){
  if ($index === "value4"){
       $element = str_replace("my.", "", $element);
  }
}

2
投票

轻松一点

foreach ($array as &$item)
   $item['value4'] = str_replace('my.', "", $item['value4']);

0
投票

我同意@splash58,你的二维数组不需要递归方法。

您可以使用

foreach()
最直接地访问和改变特定的列值。在循环签名中声明
&$v
确保对该值的任何更改都在原始数组中表示。

代码:(演示

foreach ($array as ['value4' => &$v]) {
    $v = str_replace("my.", "", $v);
}
var_export($array);

当然,整行也可以这样做,但是您的示例数据表明只有一列是有意义的目标。无论如何,这里是你如何使用

str_replace()
以相同的方式修改一维数组:(Demo

foreach ($array as &$row) {
    $row = str_replace("my.", "", $row);
}
var_export($array);
© www.soinside.com 2019 - 2024. All rights reserved.