我有这个关联数组,我想按自定义顺序排序(不只是按字母顺序排列):
$arr = [
'1' => 'Lorem Ipsum 1',
'2' => 'Lorem Ipsum 3',
'3' => 'Lorem Ipsum 2',
'4' => 'Text A',
'5' => 'Text B',
'6' => 'Text C',
'7' => 'Lorem Ipsum 4',
'8' => 'Text D',
'9' => 'Text E',
];
我需要此输出:
$arr = [
'4' => 'Text A',
'5' => 'Text B',
'6' => 'Text C',
'8' => 'Text D',
'9' => 'Text E',
'1' => 'Lorem Ipsum 1',
'3' => 'Lorem Ipsum 2',
'2' => 'Lorem Ipsum 3',
'7' => 'Lorem Ipsum 4'
];
如何对数组进行排序(保持键值关联)
我已经尝试使用函数uasort,但无法找到如何从 Text 开始对它们进行排序。
谢谢
答案 0 :(得分:3)
您可以使用uasort()
,并在sort函数中检查值是否以"Text"
开头。如果是这样,请使用此案例排序,否则,自然排序:
$arr = [
'1' => 'Lorem Ipsum 1',
'2' => 'Lorem Ipsum 3',
'3' => 'Lorem Ipsum 2',
'4' => 'Text A',
'5' => 'Text B',
'6' => 'Text C',
'7' => 'Lorem Ipsum 4',
'8' => 'Text D',
'9' => 'Text E',
];
uasort($arr, function($a, $b){
$a_text = strpos($a, 'Text') === 0;
$b_text = strpos($b, 'Text') === 0;
if ($a_text != $b_text) {
return $b_text - $a_text ;
}
return strnatcmp($a,$b);
});
print_r($arr);
输出:
Array
(
[4] => Text A
[5] => Text B
[6] => Text C
[8] => Text D
[9] => Text E
[1] => Lorem Ipsum 1
[3] => Lorem Ipsum 2
[2] => Lorem Ipsum 3
[7] => Lorem Ipsum 4
)
答案 1 :(得分:1)
答案 2 :(得分:0)
$arr = [
'1' => 'Lorem Ipsum 1',
'2' => 'Lorem Ipsum 3',
'3' => 'Lorem Ipsum 2',
'4' => 'Text A',
'5' => 'Text B',
'6' => 'Text C',
'7' => 'Lorem Ipsum 4',
'8' => 'Text D',
'9' => 'Text E',
];
rsort($arr);
var_dump($arr);