替换2d数组列值中的子字符串



我试图使用str_replace()删除"my."

从数组的数组的value4元素中取出。

然而,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);

不,它适用于字符串或单维数组....您可以通过

中的array_walk_recursive回调来使用它
array_walk_recursive(
    $myarray,
    function (&$value) {
        $value = str_replace('.my', '', $value);
    }
);

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

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

轻松点

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

我同意@splash58的观点,你的2d数组不需要递归方法。

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

代码(演示):

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);

相关内容

  • 没有找到相关文章

最新更新