我有一个看起来像这样的数组:
$array = [
'field1' => [
'#type' => 'text',
'#label' => 'Field 11',
],
'field4' => [
'#type' => 'fieldset',
'#label' => 'Field 4',
],
'field12' => [
'#type' => 'text',
'#label' => 'Field 12',
],
'field3' => [
'#type' => 'fieldset',
'#label' => 'Field 3',
],
'field18' => [
'#type' => 'text',
'#label' => 'Field 18',
],
];
我想以这样的方式对这个数组进行排序,其中fieldset
类型的所有字段都在底部。同时,我希望文本字段(位于顶部)按#label
按字母顺序排序,字段集(应位于底部)也应按标签的字母顺序排序。这是我到目前为止所做的。
ksort($array);
uasort($array, function($field1) {
if ($field1['#type'] !== 'fieldset') {
return 0;
}
return 1;
});
按键值对数组进行排序成功按字母顺序对整个数组进行排序。但是,一旦我添加uasort
,虽然我的fieldset
位于底部,但字母顺序不再存在。
有什么想法吗?
答案 0 :(得分:2)
使用具有2个条件的usort
usort($array, function ($i1, $i2) {
// compare types
$r = ($i1['#type'] == 'fieldset' ? 1 : 0) - ($i2['#type'] == 'fieldset' ? 1 : 0);
// if both are (or not) fieldset (r == 0), compare labels
return $r ? $r : strcmp($i1['#label'], $i2['#label']); } );
答案 1 :(得分:1)
我会使用UPDATE Dtable d
INNER JOIN Rtable r
ON d.key = r.key
SET
d.value = r.value,
r.value = 0
WHERE
d.key = 403 AND d.value = 0 AND r.id = 403
。如果您只有array_multisort
和fieldset
:
text
将所有array_multisort(array_column($array, '#type'), SORT_DESC,
array_column($array, '#label'), SORT_ASC,
$array);
值提取为数组排序降序,并将所有#type
值提取到升序的数组中,对原始值进行排序。