php - 用户以具体值(value)高优先级排序

标签 php sorting

我正在尝试实现一个函数,该函数将按词法顺序对字符串数组进行排序(不区分大小写)。但有一个异常(exception):如果字符串等于,比方说,“bingo!”将此行放在顶部。

我制作了一些在给定的测试数据上运行良好的函数。但我不确定我不会用特殊情况来欺骗自己。请检查我。

<?php

$a = [
    'alfa', 
    'beta',
    'gama',
    'sigma',
    'foo',
    'bar',
    'bingo!',
];

usort($a, function ($a, $b) {
    $cmp = strcasecmp($a, $b);
    return $cmp == 0
    ? 0
    : (strcasecmp($a, 'bingo!') == 0
            ? -1000
            : (
            strcasecmp($b, 'bingo!') == 0
            ? 1000
            : $cmp
            )
    );
});

var_export($a);

最佳答案

使用 usort 的解决方案:

$onTop = 'bingo!';

$array = [
   'alfa', 
   'beta',
   'gama',
   'sigma',
   'foo',
   'bar',
   'bingo!',   
];

usort($array,function($a,$b) use($onTop){
  $r = ($b == $onTop) <=> ($a == $onTop);
  return $r==0 ? strnatcasecmp($a,$b) : $r;
});

var_export($array);

结果:

array (
  0 => "bingo!",
  1 => "alfa",
  2 => "bar",
  3 => "beta",
  4 => "foo",
  5 => "gama",
  6 => "sigma",
)

关于php - 用户以具体值(value)高优先级排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60153210/

相关文章:

java - 使用 Java 集合排序时如何处理空值

php - 为 firebase 云消息传递 PHP 生成 OAUTH token

php - 使用 PHP 改进我的 CSS

php - Eloquent 关系和数据库或三向关系

c - 插入排序不起作用

c++ - 首先按字母顺序然后按数字对数字列表进行排序

php - 更新多个查询时,更新 php mysqli 中的行计数不起作用

javascript - 如何在javascript中获取meta属性

javascript - 重新排列 javascript 对象 - 使用 .sort() 的键不会保留在正在排序的数组上

c - 为什么我在大输入时遇到 scanf 的段错误