PHP:如何使用可变长度数组中的列表中的随机文本查找和替换键的值
我有一个不同的播放列表数组,包含每个项目的媒体/源URL。像这样: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
$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
匹配的任何/所有引用。