首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP按字母和数字排序数组

PHP按字母和数字排序数组
EN

Stack Overflow用户
提问于 2021-01-29 22:15:05
回答 3查看 57关注 0票数 0

假设我有一个iPhone模型数组['iPhone 11', 'iPhone 5', 'iPhone XS', 'iPhone 12'],它需要在这个均值['iPhone 12', 'iPhone 11', 'iPhone 5', 'iPhone XS']中排序。我尝试过使用本机排序(p.g.sort())函数,或者尝试过直接从DB排序,但所有的解决方案都给出了这个输出['iPhone 11', 'iPhone 12', 'iPhone 5', 'iPhone XS']。有没有人有一些解决方案/想法应该怎么做?

EN

回答 3

Stack Overflow用户

发布于 2021-01-29 22:33:07

你需要usort function。例如,

代码语言:javascript
运行
复制
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);

这将导致如下结果

代码语言:javascript
运行
复制
Array
(
    [0] => iPhone 12
    [1] => iPhone 11
    [2] => iPhone 5
    [3] => iPhone XS
)
票数 0
EN

Stack Overflow用户

发布于 2021-01-30 20:15:43

这项任务描述得不够准确。

我认为这比@El_Vanja的评论更复杂。我试图说得更具体。

  • 模型具有用空格分隔的型号名称和类型。
  • 型号名称(此处仅为iPhone)应按字母升序排序。
  • 数字类型如何11优先于字母如何XS。
  • 如果类型是数字,则顺序为降序。

H19在另一种情况下,类型按升序排序。

对于这个任务,我扩展了示例数组。

代码语言:javascript
运行
复制
$in = ['ax A', 'iPhone 11', 'iPhone 5', 'iPhone XS', 'iPhone 12', 'master 6', 'ax Z', 'ax B','xphone'];

解决方案是使用usort和一个特殊的排序函数。

代码语言:javascript
运行
复制
function specialSort($a,$b){
  list($aModel,$aTyp) = explode(' ',$a.' ');
  list($bModel,$bTyp) = explode(' ',$b.' ');

  return $aModel <=> $bModel
   ?: (int)$bTyp <=> (int)$aTyp
   ?: $aTyp      <=> $bTyp
  ;
}

usort($in,'specialSort')

测试输出:

代码语言:javascript
运行
复制
echo implode(' | ',$in);
//ax A | ax B | ax Z | iPhone 12 | iPhone 11 | iPhone 5 | iPhone XS | master 6 | xphone
票数 0
EN

Stack Overflow用户

发布于 2021-01-29 22:24:04

您是否尝试过使用

代码语言:javascript
运行
复制
array_multisort($array, SORT_NATURAL);

https://www.php.net/manual/en/function.array-multisort.php

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65956116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档