使用递归迭代器php在多维数组中搜索和替换

使用递归迭代器php在多维数组中搜索和替换,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我是php和课程的新手 我有一个多维数组,我想循环并替换字符串的一部分(如果存在) 这是我的阵列: $unser = array( "a" => "https://technet.microsoft.com", "b" => "https://google.com", "c" => "https://microsoft.com", "d" => array( "a" => "https://microsof

我是php和课程的新手

我有一个多维数组,我想循环并替换字符串的一部分(如果存在)

这是我的阵列:

$unser = array(
    "a" => "https://technet.microsoft.com",
    "b" => "https://google.com",
    "c" => "https://microsoft.com",
    "d" => array(
              "a" => "https://microsoft.com",
              "b" => "https://bing.com",
              "c" => "https://office.com",
              "d" => "https://msn.com"
          );
);
我想搜索的值是:microsoft,我想用stackoverflow替换它,并保存数组,以便与其他函数(如json_encode)一起使用

我能够在数组上循环并搜索项目并替换它,但它没有保存数组,我不知道为什么

<?php

$unser = array(
    "a" => "https://technet.microsoft.com",
    "b" => "https://google.com",
    "c" => "https://microsoft.com",
    "d" => array(
              "a" => "https://microsoft.com",
              "b" => "https://bing.com",
              "c" => "https://office.com",
              "d" => "https://msn.com"
          );
);

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($unser));
foreach($iterator as $key => $value) {
    if (strpos($value,'microsoft') !== false) {
        #echo($value);
        $value = substr_replace('microsoft', 'stackoverflow', $value);
        #echo($value);
    }
}

var_dump(iterator_to_array($iterator,true)); 

?>

提前谢谢你的帮助。

更新:我看到你更新了你的问题,所以现在我的答案不是那么相对

你可以做得容易得多。给你:

<?php

$data = array(
    "a" => "https://technet.microsoft.com",
    "b" => "https://google.com",
    "c" => "https://microsoft.com",
    "d" => "https://yahoo.com"
);

foreach ($data as $key => $value) {
    if (strpos($value, 'microsoft') !== false) {
        $data[$key] = str_replace('microsoft', 'stackoverflow', $value);

    }
}

var_dump($data);

你试图用一种过于复杂的方式来做这件事。您只需使用
str_replace()
函数()即可完成此操作

对于多维数组:

$data = array(); //Multi-D Array

foreach($data as $key => $subarray)
{
    foreach($subarray as $subkey => $subsubarray)
    {
        if (strpos($value, 'microsoft') !== false)
        {            
            $data[$key][$subkey] = str_replace('microsoft', 'stackoverflow', $value);
        }
    }
}
$data = array(
    "a" => "https://technet.microsoft.com",
    "b" => "https://google.com",
    "c" => "https://microsoft.com",
    "d" => "https://yahoo.com"
    );

foreach ($data as $key => $value)
{
    if (strpos($value, 'microsoft') !== false)
    {
        $data[$key] = str_replace('microsoft', 'stackoverflow', $value);
    }
}

对于一维数组:

$data = array(); //Multi-D Array

foreach($data as $key => $subarray)
{
    foreach($subarray as $subkey => $subsubarray)
    {
        if (strpos($value, 'microsoft') !== false)
        {            
            $data[$key][$subkey] = str_replace('microsoft', 'stackoverflow', $value);
        }
    }
}
$data = array(
    "a" => "https://technet.microsoft.com",
    "b" => "https://google.com",
    "c" => "https://microsoft.com",
    "d" => "https://yahoo.com"
    );

foreach ($data as $key => $value)
{
    if (strpos($value, 'microsoft') !== false)
    {
        $data[$key] = str_replace('microsoft', 'stackoverflow', $value);
    }
}

谢谢,这对简单数组有效,但对多维数组无效。它给了我这个错误消息。警告:strpos()要求参数1为字符串,数组中给定的inok可用于带有数组的嵌套数组。我有一个数组,里面有4个嵌套数组。。我应该怎么做呢?您可以再添加两个级别的
foreach
循环,使其能够处理4个级别的数组。我知道这不是一个很好的解决方案,但它很有效。试试看,告诉我是否有效。我会自己尝试寻找更好的解决方案。我又添加了2个foreach-s,并添加了一个if(is_数组),所以因为它不是数组。是的,是的,但我不知道我拥有的所有阵列,因此我必须在所有阵列上进行测试,以查看添加所有阵列的嵌套计数。例如,10个嵌套foreach-s以防万一,如果可以的话,我将尝试在白天找到更好的解决方案。这真的让我很好奇!干杯