Php 从字符串中筛选出多个字符串
我一直在写一段代码,最后终于明白了它的工作原理,但是我的PHP处理的太多了,我想知道是否有更简单的方法来解决我的问题 我正在使用的数据库中充满了艺术家的曲目,以及表中的示例:Php 从字符串中筛选出多个字符串,php,string,Php,String,我一直在写一段代码,最后终于明白了它的工作原理,但是我的PHP处理的太多了,我想知道是否有更简单的方法来解决我的问题 我正在使用的数据库中充满了艺术家的曲目,以及表中的示例: 作曲家姓名=[@123:artist\u display\u name1]英尺。 [@58:Artister\u display\u name2] track_title=Le示例([@798:artist_display_name3]混音) 其中,[:是艺术家的id(链接到艺术家个人资料),字符串:]是艺术家的显示名
- 作曲家姓名=[@123:artist\u display\u name1]英尺。 [@58:Artister\u display\u name2]
- track_title=Le示例([@798:artist_display_name3]混音)
现在的问题是如何在没有括号的情况下尽可能快地获取显示名称,但使用艺术家id执行另一个操作(例如从中创建链接并将艺术家id放入数据库或其他东西)必须使用带有
preg\u match
的正则表达式:
function renderRow($rawRow) {
return preg_replace("/\[@([0-9]*):([^\]]*)\]/", "$2", $rawRow);
}
另一种方法是一种更直接的方法(O(N)),速度大约是我的快速基准测试的10到20倍:
函数renderRow($rawRow){
$len=strlen($rawRow);
$status=0;
对于($i=0;$i<$len;$i++){
$char=$rawRow[$i];
如果($char=='[')
$status=1;
else if($status==1){
如果($char===':')
$status=2;
继续;
}
如果($status===2&&$char===']'),则为else
$status=0;
其他的
$row.=$char;
}
返回$row;
}
你能在你的表格中添加更多的列来存储艺术家id
和显示姓名吗?
我能,但是涉及到很多其他表格,这基本上让事情变得困难了你能让你的问题更精确一点吗?你在寻找数据库优化技巧吗?解析作曲家姓名和曲目标题的方法?很难知道你在找什么。一个php脚本可以解析字符串中的所有显示名称,所以你想要[@123:artist\u display\u name1]ft.@58:artist\u display\u name2]
成为'artist\u display\u name1 ft.artist\u display\u name2'
?哇,谢谢@KeVin,工作得很有魅力,正是我需要的,而且速度更快!顺便说一下,使用了第二个函数!再次感谢!
function renderRow($rawRow) {
$len = strlen($rawRow);
$status = 0;
for ($i = 0; $i < $len; $i++) {
$char = $rawRow[$i];
if ($char === '[')
$status = 1;
else if ($status === 1) {
if ($char === ':')
$status = 2;
continue;
}
else if ($status === 2 && $char === ']')
$status = 0;
else
$row .= $char;
}
return $row;
}