替换 PHP 数组中包含单词的所有字符串
replace all strings that contains a word in a PHP Array
我正在尝试将所有包含 http://api.example.com/data/
的 URL 转换为 https://example.com/data/
在使用 Fat-Free Framework 的数据库数组中,下面尝试的代码 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 快,这很有趣。
我正在尝试将所有包含 http://api.example.com/data/
的 URL 转换为 https://example.com/data/
在使用 Fat-Free Framework 的数据库数组中,下面尝试的代码 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 快,这很有趣。