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

vawmfj5a  于 2023-04-19  发布在  PHP
关注(0)|答案(4)|浏览(160)

我尝试使用str_replace()来删除数组中value4元素中的“my.”。
但是,str_replace("my.", "", $myarray);并没有改变任何东西。
str_replace()不适用于二维数组吗?
我的示例数据和编码尝试:

$array = [
    [
        'value1' => 'John Doe',
        'value2' => 'Father',
        'value3' => '',
        'value4' => 'http://www.website.my.com'
    ],
    [
        'value1' => 'Jane Doe',
        'value2' => 'Mother',
        'value3' => '',
        'value4' => 'http://www.website.my.com'
    ]
    // ...
];
$out = str_replace('.my', '', $array);
var_export($out);
qjp7pelc

qjp7pelc1#

不,它适用于字符串,或者一维数组……你可以通过回调函数array_walk_recursive来使用它

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

new9mtju2#

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

$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);
  }
}
hgb9j2n6

hgb9j2n63#

让它变得简单

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

kqhtkvqz4#

我同意@splash58的观点,你的2d数组不需要递归方法。
您可以使用foreach()最直接地访问和改变特定列的值。在循环签名中声明&$v可确保对该值的任何更改都在原始数组中表示。
代码:(Demo

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

当然,同样的操作也可以对整行进行,但是你的示例数据表明只有一列是有意义的目标。无论如何,下面是如何使用str_replace()以同样的方式修改1d数组:(Demo

foreach ($array as &$row) {
    $row = str_replace("my.", "", $row);
}
var_export($array);

相关问题