php - 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;
?>
这种方法有效,但有两个问题。一方面,它使用两个循环,第二个问题是,一旦我们包含更多文件类型,如ogg
or ,此方法就会失败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);
});
推荐阅读
- ecmascript-6 - 为什么 Boolean.prototype 又是一个布尔对象?(对于字符串和数字也是如此,但不是日期或正则表达式?)
- ckeditor - 从 TYPO3 7.6 中的rtehtmlarea 迁移到 8.7 中的 rte_ckeditor使所有预先存在和成为
- javascript - Vue.js - 仅显示错误的数组元素
- google-identity - Yolo API 访问请求的大约周转时间是多少?
- python - 在源代码中开启/关闭测试
- ruby-on-rails - 在 Rails 中调用方法的最佳方法
- c - 将 Swift 字符串数组分配给采用 char ** 值的 C 结构变量
- python - 是否可以在不使用底层源代码的情况下在 Python 中包装 C++ DLL?
- php - Xampp Apache,无法访问其他目录中的文件
- c - 将字符串拆分为字符串数组