【问题标题】:asort PHP Array and keep one entry at the top对 PHP 数组进行排序并在顶部保留一个条目
【发布时间】:2018-02-12 22:01:00
【问题描述】:

我有一个 PHP 数组

我想按字母顺序排序并在顶部保留一个精确的条目:

$arr = array ("Orange", "Banana", "Strawberry", "Apple", "Pear");
asort($arr);

现在这将输出:

Apple, Banana, Orange, Pear, Strawberry

我希望它保持橙色作为第一个条目,然后重新排序其他条目:

Orange, Apple, Banana, Pear, Strawberry

谢谢。

【问题讨论】:

  • 先重新排序,然后移动顶部的条目。
  • @Federkun 重新排序后如何理解哪个值应该放在第一位?

标签: php arrays sorting asort


【解决方案1】:

您可以使用自定义函数和uasort 传入一个元素以保持在顶部:

$keep = 'Orange';

uasort($arr, function ($lhs, $rhs) use ($keep) {
  if ($lhs === $keep) return -1;
  if ($rhs === $keep) return 1;

  return $lhs <=> $rhs;
});

Orange 在数组中的位置无关紧要,它会找到最前面的路。

编辑:请注意,&lt;=&gt; 运算符需要 PHP 7。如果您使用的是 5,则可以替换为对 strcmp 的调用

【讨论】:

    【解决方案2】:

    从数组中获取第一个元素,然后将其返回:

    $arr = array ("Orange", "Banana", "Strawberry", "Apple", "Pear");
    
    $first = array_shift($arr);
    asort($arr);
    array_unshift($arr, $first);
    

    更新未知orange位置:

    $arr = array ("Banana", "Orange", "Strawberry", "Apple", "Pear"); 
    // $k is index of "Orange" in array
    $k = array_search('Orange', $arr);
    // store element with founded $k in a variable 
    $orange = $arr[$k];
    // remove $k element from $arr
    // same as `unset($arr[$k]);`
    array_splice($arr, $k, 1);
    // sort 
    asort($arr);
    // add element in the beginning
    array_unshift($arr, $orange);
    

    【讨论】:

    • 如果默认情况下 Orange 不是 asort 之前的第一个条目怎​​么办?
    猜你喜欢
    • 1970-01-01
    • 2013-03-23
    • 2021-04-14
    • 2017-07-12
    • 2017-04-28
    • 2021-07-19
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多