• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
孙龙 程序员
少时总觉为人易,华年方知立业难
博客园    首页    新随笔    联系   管理    订阅  订阅
php usort() 根据预先数组字段值排序数组
<?php
function my_sort($a,$b)
{
if ($a==$b) return 0;
return ($a<$b)?-1:1;
}

$a=array(4,2,8,6);
usort($a,"my_sort");
?>
2
4
6
8

2,

返回:

 ,3,

$a = [
  0 => "L-PC23102300012",
  1 => "L-PC23111300010",
  2 => "L-PC23102300013",
];

$b = [
  [
    "stock_out_item_id" => 609,
    "erp_stock_out_item_id" => "",
    "stock_out_id" => 408,
    "source_item_id" => 78,
    "stock_in_batch_sn" => "L-PC23102300012",
  ],
  [
    "stock_out_item_id" => 609,
    "erp_stock_out_item_id" => "",
    "stock_out_id" => 408,
    "source_item_id" => 78,
    "stock_in_batch_sn" => "L-PC23102300013",
  ],
  [
    "stock_out_item_id" => 609,
    "erp_stock_out_item_id" => "",
    "stock_out_id" => 408,
    "source_item_id" => 78,
    "stock_in_batch_sn" => "L-PC23111300010",
  ]
];

// 创建一个映射数组,用于快速查找$b中的元素在$a中的位置
$indexMap = [];
foreach ($a as $index => $value) {
    $indexMap[$value] = $index;
}

// 使用usort进行排序
usort($b, function($item1, $item2) use ($indexMap) {
    // 根据$a中的顺序对$b中的元素进行排序
    $pos1 = $indexMap[$item1['stock_in_batch_sn']];
    $pos2 = $indexMap[$item2['stock_in_batch_sn']];
    return $pos1 <=> $pos2;
});

// 输出排序后的数组
print_r($b);

这段代码首先创建了一个映射数组$indexMap,它将$a中的元素映射到它们在数组中的索引位置。然后,使用usort函数和自定义的排序函数对$b数组进行排序。自定义排序函数使用$indexMap来确定每个元素在$a中的顺序,并据此对$b中的元素进行排序。

运行这段代码后,$b数组将按照$a中元素的顺序进行排序。

在PHP中,$pos1 <=> $pos2 是一个空间运算符,称为“三元组比较运算符”或简称“太空船运算符”。它用于比较两个值,并返回一个结果,这个结果可以是-1、0或1。

  • 如果 $pos1 小于 $pos2,它返回 -1。
  • 如果 $pos1 等于 $pos2,它返回 0。
  • 如果 $pos1 大于 $pos2,它返回 1。

这个运算符非常适合用于排序,因为它可以直接告诉排序函数哪个值应该排在前面,而不需要写额外的if语句来比较两个值。

在usort函数中,自定义的比较函数应该返回一个小于0、等于0或大于0的值,以决定第一个参数应该排在第二个参数前面、两者相等或第一个参数应该排在后面。使用三元组比较运算符可以简洁地实现这一点。

 

本文来自博客园,作者:孙龙-程序员,转载请注明原文链接:https://www.cnblogs.com/sunlong88/p/18222858

posted on 2024-05-30 17:30  孙龙-程序员  阅读(32)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3