首页 > 解决方案 > PHP按字母和数字排序数组

问题描述

假设我有一系列 iPhone 型号['iPhone 11', 'iPhone 5', 'iPhone XS', 'iPhone 12']需要按这种方式排序['iPhone 12', 'iPhone 11', 'iPhone 5', 'iPhone XS']。我尝试的是使用本机排序(pg sort())函数或尝试从 DB 直接 orderBy,但所有解决方案都给了我这个输出['iPhone 11', 'iPhone 12', 'iPhone 5', 'iPhone XS']。有没有人有一些解决方案/想法应该怎么做?经过所有尝试后,我感到非常沮丧。

标签: phparrayssorting

解决方案


您需要usort 功能。例如,

function getPhoneModel($phoneName) {
  $regex = "/iPhone (.+)$/";
  preg_match($regex, $phoneName, $matches);
  $model = $matches[1];
  if ($model === 'XS') {
    $model = 1;
  }
  return intval($model);
}
    
$phones = ['iPhone 11', 'iPhone 5', 'iPhone XS', 'iPhone 12'];
usort($phones, function($phoneNameA, $phoneNameB) {

    $a = getPhoneModel($phoneNameA);
    $b = getPhoneModel($phoneNameB);
    if ($a > $b) {
        return (-1);
    } elseif ($a < $b) {
        return 1;
    } else {
        return 0;
    }
});

print_r($phones);

这将导致

Array
(
    [0] => iPhone 12
    [1] => iPhone 11
    [2] => iPhone 5
    [3] => iPhone XS
)

推荐阅读