使用递归迭代器php在多维数组中搜索和替换
我是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
$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以防万一,如果可以的话,我将尝试在白天找到更好的解决方案。这真的让我很好奇!干杯