PHP中按字符串分割首段版本号排序关联数组的实现方法
PHP关联数组按子元素内版本号字段排序解决方案
你需要使用PHP自定义排序函数usort替换默认的asort,自己实现按|分割后首段版本号的比较逻辑,具体实现代码如下:
// 遍历外层数组时加&引用,直接修改原数组内容 foreach ($test_array as &$subArray) { usort($subArray, function($a, $b) { // 分割字符串取首段版本号 $verA = explode('|', $a)[0]; $verB = explode('|', $b)[0]; // 用内置版本比较函数返回对比结果 return version_compare($verA, $verB); }); } // 解绑引用变量,避免后续操作数组时出现意外问题 unset($subArray);
原方案失效原因
asort会直接对整个字符串按字典序做比较,不会自动提取你需要的版本号字段,所以无法符合排序要求。
低版本PHP兼容写法
如果你的PHP版本低于5.4,不支持直接取explode返回数组的下标元素,可以调整回调内的写法:
usort($subArray, function($a, $b) { $a_parts = explode('|', $a); $verA = $a_parts[0]; $b_parts = explode('|', $b); $verB = $b_parts[0]; return version_compare($verA, $verB); });
内容的提问来源于stack exchange,提问作者ravenUSMC
相关产品推荐
相关产品推荐

