我想对字符串数组进行排序,其中我想用作排序标识符的子字符串位于相关字符串的中间。我已经尝试使用一种非常粗糙的技术来做到这一点,我想知道是否有更好的方法来做到这一点。
这是我到目前为止所想到的:
<?php
$tracks = array(
"Arcane Library_Track2.mp3",
"Deeper Ocean_Track4.mp3"
"Neon Illumination_Track3.mp3",
"Sound Of Cars_Track1.mp3",
);
$tracksreversed = array();
$sortedtracks = array();
foreach( $tracks as $t) {
array_push( $tracksreversed, strrev($t) );
}
sort($tracksreversed);
foreach( $tracksreversed as $t ) {
array_push( $sortedtracks, strrev($t) );
}
$tracks = $sortedtracks;
?>
这个方法可行,但有两个问题。首先,它使用两个循环,第二个问题是,一旦我们包含更多文件类型(例如
ogg
或 wav
),此方法就会失败。
有没有一种方法可以根据
_Track1
、_Track2
、_Track3
标识符轻松排序该字符串?也许可以在这里完成一些正则表达式排序,或者我可以采取其他一些方法来使其更加紧凑?
也许
usort
功能会有用。喜欢:
$getIdx = function(string $name) {
preg_match('/_Track(?<idx>\d+)/', $name, $matches);
return $matches['idx'];
};
usort($tracks, function ($a, $b) use ($getIdx) {
return $getIdx($a) <=> $getIdx($b);
});