【问题标题】:php - sort an array according to second given arrayphp - 根据第二个给定数组对数组进行排序
【发布时间】:2017-03-09 12:40:08
【问题描述】:
$a = array('val1','val2',200, 179,230, 234, 242); 
$b = array(230, 234, 242, 179, 100);

所以数组 $a 应该按照数组 $b 排序,$resultArray 应该是 ('val1','val2',200, 230, 234, 242, 179)

【问题讨论】:

  • 你想过滤你的数组吗?
  • 是的那种,来自 a 的值将完全按 array 排序,如果来自 a 的值在 b 中不存在,则不会考虑,如果 a 中有额外的值,则为a 中的值不应更改

标签: php arrays


【解决方案1】:

您的排序要求:

  1. 排序数组中未找到的值位于找到的值之前。
  2. 然后:
    1. 根据它们在排序数组中的位置对找到的值进行排序
    2. 在排序数组中正常/升序排序未找到的值

翻转您的订单查找数组将提高效率,同时在关键字搜索之前进行处理比在 php 中搜索值更快。

代码:(Demo)

$array = ['val1', 'val2', 200, 179, 230, 234, 242]; 
$order = [230, 234, 242, 179, 100];
$keyedOrder = array_flip($order); // for efficiency

usort($array, function($a, $b) use ($keyedOrder) {
    return [$keyedOrder[$a] ?? -1, $a]
           <=>
           [$keyedOrder[$b] ?? -1, $b];
});
var_export($array);

输出:

array (
  0 => 'val1',
  1 => 'val2',
  2 => 200,
  3 => 230,
  4 => 234,
  5 => 242,
  6 => 179,
)

$keyedOrder[$variable] ?? -1 实际上意味着如果在查找中找不到该值,则使用-1 将项目定位在查找数组中的最小值之前(0)。如果在查找中找到该值作为键,则在查找中使用分配给该键的整数值。


从PHP7.4开始,可以使用箭头函数语法使sn-p更加简洁,避免use()声明。

Demo

usort($array, fn($a, $b) => [$keyedOrder[$a] ?? -1, $a] <=> [$keyedOrder[$b] ?? -1, $b]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-18
    • 2020-11-19
    • 2022-01-10
    • 2022-01-24
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    相关资源
    最近更新 更多