首页 > 解决方案 > PHP使用子字符串作为标识符对字符串数组进行排序

问题描述

我想对一个字符串数组进行排序,其中我想用作排序标识符的子字符串位于相关字符串的中间。我已经尝试过使用非常粗糙的技术来做到这一点,我想知道是否有更好的方法来做到这一点。

到目前为止,这是我想出的:

<?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;
?>

这种方法有效,但有两个问题。一方面,它使用两个循环,第二个问题是,一旦我们包含更多文件类型,如oggor ,此方法就会失败wav

有没有办法根据_Track1, _Track2,_Track3标识符轻松对该字符串进行排序?也许可以在这里进行一些正则表达式排序,或者我可以做一些其他的方法来使它更紧凑?

标签: phparrayssorting

解决方案


也许这个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);
});

似乎工作https://3v4l.org/j65rd


推荐阅读