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