$a= [ '1' => ['key'=>'1','id'=>'4' ],
'2' => ['key'=>'2','id'=>'1' ],
'3' => ['key'=>'3','id'=>'5' ]
]
$b = [1,5]
所以我想对数组$a
进行排序,这样如果$a[*]['id']
位于$b
数组中,它应该是第一个。
所以在这个例子中,输出应该是
$a = ['2' => ['key'=>'2','id'=>'1' ],
'3' => ['key'=>'3','id'=>'5' ]
'1' => ['key'=>'1','id'=>'4' ],
]
我试过
uasort($a, function($k, $v) use ($b) {
return in_array($v['id'],$b) ? 1 : -1;
});
但失败了:(
是否有使用任何php排序函数进行此类技巧的最佳方法?
答案 0 :(得分:3)
uasort($a, function ($x, $y) use ($b) {
return !in_array($x['id'], $b);
});
您必须注意,$y
未使用且代码无法参考,但我更喜欢这种方式。
X和Y是任意两个数组值。如果sort函数返回1,则X放在最后(第一个Y,最后一个X)。如果返回-1,则X先行(第一个X,最后一个Y)。
在这种情况下,如果true
不在$x[id]
中,则排序函数将返回$b
(相当于1),因此顺序将是Y,然后是X.这种排序将id
中的所有数组值移至最后位置$b
。
说完之后,您也可以在没有$y
的情况下使用此代码:
uasort($a, function ($x) use ($b) {
return !in_array($x['id'], $b);
});
答案 1 :(得分:0)
这是另一种实现
$a= array( '1' => array('key'=>'1','id'=>'4' ), '2' => array('key'=>'2','id'=>'1' ), '3' => array('key'=>'3','id'=>'5' ) );
$b = array(1,5);
asort($a);
function customuksort($t1, $t2) {
global $a;
return $a[$t1] < $a[$t2] ? -1 : 1;
}
uksort($b, 'customuksort');
print_r($a);
输出
Array ( [1] => Array ( [key] => 1 [id] => 4 ) [2] => Array ( [key] => 2 [id] => 1 ) [3] => Array ( [key] => 3 [id] => 5 ) )