出于排序目的,我想忽略正在排序的标题中的文章.我已经能够在MySQL中完成它,但我需要在PHP中复制.
标题:
A Tale of Two Cities --> Tale of Two Cities, A
An Unexpected Journey --> Unexpected Journey, An
The Lord Of the Rings --> Lord Of The Rings, The
$sortable = preg_replace([A |An |The]...
Run Code Online (Sandbox Code Playgroud)
我有一个复杂的数组处理例程,如果可能的话我想用一个简单的preg_xxx语句替换.已经足够修饰,相信我,"我试过的东西"只会混淆这个问题,哈哈.
为了将来参考,纯MySQL中的情况也是如此:
SELECT Title,
CASE WHEN SUBSTRING_INDEX(Title, ' ', 1) IN ('a', 'an', 'the')
THEN CONCAT(
SUBSTRING(Title, INSTR(Title, ' ') + 1),
', ',
SUBSTRING_INDEX(Title, ' ', 1)
)
ELSE Title
END AS Sortable
FROM Titles
ORDER BY Sortable
Run Code Online (Sandbox Code Playgroud)
从字符串的开头捕获并反向替换反向引用:
$sortable = preg_replace('/^(A|An|The) (.+)/', '$2, $1', $title);
Run Code Online (Sandbox Code Playgroud)
^ 匹配字符串的开头.1次或更多次+()是一个捕获组,捕获匹配的内容,并$1在第一组和$2第二组的替换中引用