【问题标题】:PHP sort mixed array values by using specific letter order [duplicate]PHP使用特定字母顺序对混合数组值进行排序[重复]
【发布时间】:2021-05-10 08:04:58
【问题描述】:

我有这个数组:

$po = array ( 
5 => '8', 
6 => '10', 
7 => '12', 
8 => '41', 
12 => '42', 
9 => '43', 
10 => '44', 
11 => '45', 
1 => 'L', 
0 => 'M', 
4 => 'S', 
2 => 'XL', 
3 => 'XXL', 
13 => 'XXS'
)

我需要这样排序:

  1. 所有数字第一个 asc
  2. 此顺序的所有信件:$order = ['XXS','XS','S','M','L','XL','XXL'];

到目前为止,我的这段代码取自互联网示例:

$sort_first  = array('XXS','XS','S','M','L','XL','XXL');
usort($poval, function ($a, $b) use ($sort_first) {
$posA = array_search($a, $sort_first);
$posB = array_search($b, $sort_first);
return $posA - $posB;
});

但是数值不行..这是重新排序后的导出:

$po = array ( 
0 => '8', 
1 => '45', 
2 => 'XXS', 
3 => '43', 
4 => '44', 
5 => '42', 
6 => '10', 
7 => '12', 
8 => '41', 
9 => 'S', 
10 => 'M', 
11 => 'L', 
12 => 'XL', 
13 => 'XXL'
)

我该怎么做? 感谢您的宝贵时间

【问题讨论】:

  • 请发布您已有的代码以及您可能遇到的任何错误。一个有效的 PHP 数组也会有所帮助
  • 未来提示:分享由var_export 生成的转储,因为它允许我们简单地将其复制并粘贴到编辑器中以重新创建您的变量。
  • #El_Vanja 谢谢你的提示,我做了你建议的更正

标签: php arrays sorting


【解决方案1】:

您可以创建自定义排序using usort

usort($values, function($a, $b){
    // Your custom logic here
    if( ctype_digit($a) && !ctype_digit($b) ){
         return -1;
    }
    if( !ctype_digit($a) && ctype_digit($b) ){
         return 1;
    }
    if( ctype_digit($a) && ctype_digit($b) ){
         return $a <=> $b;
    }

    // now you can do something here to sort if $a and $b are both non numeric.
});

(未经测试的代码,我可能混淆了正负)

【讨论】:

  • 感谢#Martijn,请查看上面编辑过的代码并建议缺少的行:)
  • 您在主题中的解决方案仅按 $order 排序,而不是按数字排序。您需要将其与我的答案结合起来
【解决方案2】:

如果我理解正确,您可以遍历您的数组并将其拆分为两个单独的数组 - 一个用于数值,一个用于非数值 - 然后将它们重新合并在一起,但我无法告诉您这是否是有效的 PHP 语法。

【讨论】:

    猜你喜欢
    • 2012-05-16
    • 1970-01-01
    • 2011-10-21
    • 2010-10-26
    • 2010-12-12
    • 2022-12-07
    • 2012-12-06
    • 2013-11-02
    相关资源
    最近更新 更多