我有一个看起来像这样的uri:
/Albums/album_id/Photos/photo_id/tags
我想将album_id
和photo_id
替换为AlbumId
和PhotoId
。我该如何做到这一点?
答案 0 :(得分:2)
也可以试试这个:
$str = "/Albums/album_id/Photos/photo_id/tags";
$str = str_replace("_", "", ucwords($str, " /_"));
对ucwords的引用(尽管其中一些php在线测试人员说明了其他情况,但确实允许第二个参数...)
答案 1 :(得分:1)
我最终使用了以下内容:
str_replace(' ', '', ucwords(str_replace('_', ' ', str_replace('/', '/ ', $uri))));
<强>解释强>
使用/
时,前缀foo_bar
不允许FooBar
成为ucwords(str_replace('_', '', $uri))
。
相反,首先用/
替换/
(即在斜杠后添加一个空格),最后删除所有空格。
答案 2 :(得分:1)
这是另一个单行:
echo implode('', array_map('ucfirst', explode('_', $string)));
答案 3 :(得分:0)
2个步骤:
<强>实施强>
让我们将字符串作为char数组:
$a = "/Albums/album_id/Photos/photo_id/tags"
$b = str_split($a)
现在,跟随_
的每个字符都应该大写:
for ($i = 1; $i < count($b); $i++) {
if ($b[i - 1] == '_') {
$b[i] = strtoupper($b[i]);
}
}
现在,再次将其作为字符串:
$c = implode("", $b);
删除_
s
e = str_replace("_", "", $c);
和完整版:
function doThat($t) {
$b = str_split($t)
for ($i = 1; $i < count($b); $i++) {
if ($b[i - 1] == '_') {
$b[i] = strtoupper($b[i]);
}
}
return str_replace("_", "", implode("", $b));
}
答案 4 :(得分:0)
$out = str_replace(
['photo_id', 'album_id']
['PhotoId', 'AlbumId'],
$in
);
答案 5 :(得分:0)
您可以检查此代码:
$str = "/Albums/album_id/Photos/photo_id/tags";
$split_str = split("_", $str);
$new_str = $split_str[0];
for ($i = 1; $i < count($split_str); $i++)
{
$new_str .= ucfirst($split_str[$i]);
}
echo $new_str;
答案 6 :(得分:0)
也许这有帮助:
<?php
function convert($string){
$sections = explode('/',$string);
$url = '';
foreach ($sections as $section){
$words = explode('_',$section);
if(count($words) > 1){
foreach ($words as $word){
$word = ucfirst($word);
$url .= $word;
}
} else {
$url .= $words[0];
}
$url .= '/';
}
return $url;
}
$url = convert("/Albums/album_id/Photos/photo_id/tags");
echo $url;
?>
这使得单个小写单词保持不变,并且仅为ab_cd之类的部分大写并删除短划线。最后有一个斜线,如果你愿意,你可以简单地摆脱它。
答案 7 :(得分:0)
您可以通过拨打preg_replace_callback
功能来执行此操作:
$string = '/Albums/album_id/Photos/photo_id/tags';
echo preg_replace_callback(
'/_(.)/',
function($match) {
return strtoupper($match[1]);
},
$string);
奇怪的/_(.)/
笑脸实际上是正则表达式,它匹配_
之后的任何字符。 (.)
any character
被分隔为自己的组,因此我们可以在回调函数中的匹配数组中使用它。
在第一次正则表达式匹配时,$match
成为一个数组,其中包含0 => _i, 1 => i
,因此您可以在回调函数中安全地使用$match[1]
。
回调函数本身只返回转换为大写的字符串。
以上示例的输出为/Albums/albumId/Photos/photoId/tags
答案 8 :(得分:0)
我测试了这个,它为那个和其他类似的字符串做了诀窍: 它会将 /相册/ album_id / Photos / photo_id / tags 转换为 /相册/相册ID /相片/相片/标签
$ str =&#34; /相册/ album_id /相片/ photo_id / tags&#34;;
$split_str = explode("/", $str);
$result = '';
for ($i = 0; $i < count($split_str); $i++)
{
$sub_result = $split_str[$i];
if(strpos($split_str[$i], "_") !== false) {
$segments = explode("_", $split_str[$i]);
$sub_result = '';
for ($j = 0; $j < count($segments); $j++) {
$sub_result .= ucfirst($segments[$j]);
}
}
if(strlen($sub_result)) { // This will remove the empty string generated by the first part of the url
$result .= "/" . $sub_result;
}
}
echo $result;