You need to enable JavaScript to run this app. PHP如何按每个字符串中间的数字子串对一维数组进行排序
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何按每个字符串中间的数字子串对一维数组进行排序

解决方案

核心思路是用PHP内置的usort自定义排序逻辑,配合正则提取_Track后的序号作为排序依据,完全解决你当前遇到的问题。

补充:你贴的示例代码里"Deeper Ocean_Track4.mp3"末尾漏了逗号,实际运行会报语法错误,调试时注意补上。

<?php
$tracks = array(
    "Arcane Library_Track2.mp3",
    "Deeper Ocean_Track4.mp3",
    "Neon Illumination_Track3.mp3",
    "Sound Of Cars_Track1.mp3",
    "Test File_Track5.ogg",
    "Another Demo_Track6.wav"
);

usort($tracks, function($a, $b) {
    // 匹配提取_Track后面的数字
    preg_match('/_Track(\d+)/', $a, $matchesA);
    preg_match('/_Track(\d+)/', $b, $matchesB);
    // 兼容没有匹配到的情况,默认给超大值排到末尾
    $numA = isset($matchesA[1]) ? intval($matchesA[1]) : 99999;
    $numB = isset($matchesB[1]) ? intval($matchesB[1]) : 99999;
    // 用太空船运算符比较,PHP7+支持
    return $numA <=> $numB;
});

// 输出验证
print_r($tracks);
?>

方案优势

  • 仅需一次排序调用,无需额外循环反转字符串,执行效率更高
  • 排序逻辑完全基于_Track后的数字,不受文件后缀格式、前面文件名内容的影响
  • 代码可读性更强,后续维护时可以直接调整正则匹配规则适配其他排序规则

如果你的运行环境是PHP7以下版本,把太空船运算符的部分换成普通数值比较即可:

return $numA - $numB;

内容的提问来源于stack exchange,提问作者Miger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 10:36:02