PHP中如何不使用二维数组,按字符串解析出的数字排序字符串数组
解决方案
直接使用PHP内置的自定义排序函数usort()即可实现需求,无需额外构造二维数组,直接在排序回调中调用你已实现的getPrice()函数提取价格做比较即可。
完整实现代码
$string='Rohlík 5Kč CZK400 Knížka Pivo 42,- Houska 4 Kč'; $list = explode(PHP_EOL, $string); // 你已实现的getPrice函数,此处仅为模拟示例 function getPrice($item) { preg_match('/\d+/', $item, $matches); return isset($matches[0]) ? (int)$matches[0] : 0; } // 核心排序逻辑:按价格升序排序(从小到大) usort($list, function($a, $b) { $priceA = getPrice($a); $priceB = getPrice($b); // PHP7及以上版本可直接用太空船运算符简化比较逻辑 return $priceA <=> $priceB; // PHP7以下版本替换为以下写法 // if ($priceA == $priceB) return 0; // return $priceA > $priceB ? 1 : -1; }); // 验证排序结果 print_r($list);
可选调整说明
- 若需要保留原数组的键名,将
usort()替换为uasort()即可,回调逻辑完全一致 - 若需要按价格降序排序(从大到小),将回调中的
$priceA <=> $priceB修改为$priceB <=> $priceA即可 - 如果数组元素量级极大、且
getPrice()计算逻辑复杂,可提前预计算所有元素的价格存入临时数组,再用array_multisort()排序减少重复计算,常规业务场景下上述写法已经足够简洁高效
内容的提问来源于stack exchange,提问作者user17082108
相关产品推荐
相关产品推荐

