PHP:如何使用可变长度数组中的列表中的随机文本查找和替换键的值

PHP:如何使用可变长度数组中的列表中的随机文本查找和替换键的值,php,arrays,string,list,replace,Php,Arrays,String,List,Replace,我有一个不同的播放列表数组,包含每个项目的媒体/源URL。像这样: $playlist=阵列( 排列( “title”=>“某物”, “源”=>阵列( 排列( “文件”=>”https://url.somedomain.com/path/file1.mp3" ) ), “description”=>“somedesc”, “图像”=>”http://imagepath/", “文件”=>”https://url.somedomain.com/path/file1.mp3" ), 排列( “ti

我有一个不同的播放列表数组,包含每个项目的媒体/源URL。像这样:

$playlist=阵列(
排列(
“title”=>“某物”,
“源”=>阵列(
排列(
“文件”=>”https://url.somedomain.com/path/file1.mp3"
)
), 
“description”=>“somedesc”,
“图像”=>”http://imagepath/",
“文件”=>”https://url.somedomain.com/path/file1.mp3"
),
排列(
“title”=>“elsewaa”,
“源”=>阵列(
排列(
“文件”=>”https://url.somedomain.com/someother/file2.mp3"
)
), 
“说明”=>“其他说明”,
“图像”=>”http://someotherimagepath/", 
“文件”=>”https://url.somedomain.com/someother/file2.mp3"
)
);
如何查找并替换
文件
键中的值以“随机”选择子域

例如,如果
文件
键包含
url.foo.com
,如何将数组值的
url.foo.com
部分替换为
differentsubdomain.foo.com
anotherplace.foo.com

有人向我提供了一个使用
str_replace
(谢谢Qirel!)的单个字符串的解决方案,但我需要一个专门解决上述阵列配置的解决方案

阵列中的所有嵌套都会让我头疼

有没有可能以某种方式修改奇雷尔的建议

$random_values = ['differentsubdomain.foo.com', 'anotherplace.foo.com', 'someotherplace.foo.com'];
$random = $random_values[array_rand($random_values)];
// str_replace('url.foo.com', $random, $file);

下面是一个使用递归将名为
file
的任何键中的子域替换为随机子域的示例

函数replaceUrlHost(&$array、$hostDomain、$subdomains)
{
foreach($key=>$value的数组){
if(是_数组($value)){
$array[$key]=replaceUrlHost($value、$hostDomain、$subdomains);
继续;
}
如果($key!=='file'){
继续;
}
$hostname=parse_url($value,PHP_url_HOST);
if(strpos($hostname,$hostDomain)==false){
继续;
}
$array[$key]=str\u replace(
$hostname,
$subdomains[array_rand($subdomains)]。$hostDomain,
美元价值
);
}
返回$array;
}
//用法
$subdomains=['bar','baz','bing','bop'];
$out=replaceUrlHost($playlist,'somedomain.com',$subdomains);

如果您只是询问如何访问嵌套数组中的成员,我想您需要:

$random_values=['differentitsubdomain.foo.com','anotherplace.foo.com','someotherplace.foo.com'];
//遍历数组,通过引用更改项。
foreach($playlistas&$item){
$random\u key=array\u rand($random\u value);
$new_domain=$random_value[$random_key];
$item['file']=str_replace('url.foo.com',$new_domain);
$item['sources'][0]['file']=str_replace('url.foo.com',$new_domain);
}

那么,为了正确起见,您想将
文件
键中的子域替换为列表中的随机子域吗?(忽略
数组)我需要更改嵌套在
中的值,以及最后的
文件
键。基本上检查并替换
文件中与
url.foo.com
匹配的任何/所有引用。