替换PHP数组中包含单词的所有字符串



我正在尝试所有包含http://api.example.com/data/https://example.com/data/的URL在使用无脂肪框架时,在数据库的数组中,下面尝试的代码iv给了我

内部服务器错误,数组到字符串转换

$f3->route('GET /details/@itemid',
function($f3) {

$arr = array('result' => $f3->get('DBh')->exec('SELECT * FROM DB_table WHERE id=?',$f3->get('PARAMS.itemid')));
str_replace('http://api.example.com/data/', 'https://example.com/data/', $arr);
$f3->mset($arr);
echo Template::instance()->render('views/details.html');
}
);

好吧,您有几个简单的选项可以帮助实现这一点。我还假设您的意思是引用$arr['result'],而不仅仅是$arr,并且我需要假设您只在db列中查找一列。我将把这个专栏称为url

选项1

foreach($arr['result'] as $key => $value) {
if(empty($value['url'])) {
continue;
}
$arr['result'][$key]['url'] = str_replace('http://api.example.com/data/', 'https://example.com/data/', $value['url']);
}

选项2

foreach($arr['result'] as &$value) {
if(empty($value['url'])) {
continue;
}
$value['url'] = str_replace('http://api.example.com/data/', 'https://example.com/data/', $value['url']);
}

选项3

$arr['result'] = array_map(function($value) {
$value['url'] = str_replace('http://api.example.com/data/', 'https://example.com/data/', $value['url']);
return $value;
}, $arr['result']);

我个人对可读性和简洁性的偏好是选项2。我相信foreach语句已经过优化,实际上比array_map运行得更快,这……很有趣。

最新更新