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