我的问题是这个已经回答得很好的问题的延伸/变体:
有一个数组具有看起来是二进制的键:
codeWords = [
'000111' => [6, 1, 0, 't'],
'1110' => [4, 6, 0, 't'],
'10011' => [5, 8, 0, 't'],
'001000' => [6, 12, 0, 't'],
'00110101' => [8, 0, 0, 't'],
'010' => [3, 1, 1, 't'],
'10' => [2, 3, 1, 't'],
'011' => [3, 4, 1, 't'],
'0010' => [4, 6, 1, 't'],
'00011' => [5, 7, 1, 't'],
'000101' => [6, 8, 1, 't'],
];
我需要这个数组按如下顺序排列:
$codeWords = [
'00110101' => [8, 0, 0, 't'],
'001000' => [6, 12, 0, 't'],
'000111' => [6, 1, 0, 't'],
'000101' => [6, 8, 1, 't'],
'10011' => [5, 8, 0, 't'],
'00011' => [5, 7, 1, 't'],
'1110' => [4, 6, 0, 't'],
'0010' => [4, 6, 1, 't'],
'011' => [3, 4, 1, 't'],
'010' => [3, 1, 1, 't'],
'10' => [2, 3, 1, 't'],
];
此解决方案运行良好:
uksort($codeWords, function($a, $b) {
return strlen($a) < strlen($b);
});
但是。。。
。。。密钥长度已存储在值[0]
中。 因此,在比较函数中不必使用strlen()
。
我曾尝试使用value[0]
-相应地调整链接问题中给出的一些解决方案,但没有达到预期的结果。
有人能让我走上正轨吗?
uksort函数特别使用数组键,因此您的代码返回$A[0]
; $B[0];
仅比较0010101
键的第一个符号。
你需要UASort。
uasort($codeWords, function($a, $b) {
return $b[0] - $a[0];
});