我一直在研究一个代码,最后得到了它可行的品脱,但我的PHP处理得非常多,以至于我想知道是否有更简单的方法来解决我的问题
我正在使用的数据库中充满了来自艺术家的曲目,以及表中的示例:
[:是artist_id(链接到艺术家资料)和之间的字符串之间的数字是:]是艺术家的显示名称(有时艺术家使用不同的名称,这就是原因)
现在的问题是如何在没有括号的情况下尽可能快地获取显示名称,但是使用artist_id执行另一个操作(例如从中创建链接并将artist_id放入数据库或其他内容)
答案 0 :(得分:1)
强制性的方法是使用带preg_match
的正则表达式:
function renderRow($rawRow) {
return preg_replace("/\[@([0-9]*):([^\]]*)\]/", "$2", $rawRow);
}
另一种方式,大约快10倍到20倍(根据我的快速基准测试)是一种更直接的方法(O(N)):
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;
}