<?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,

php usort() 根据预先数组字段值排序数组_运算符

返回:

php usort() 根据预先数组字段值排序数组_运算符_02

 ,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的值,以决定第一个参数应该排在第二个参数前面、两者相等或第一个参数应该排在后面。使用三元组比较运算符可以简洁地实现这一点。