一般来说,我在yii2上有一个项目,有一个多对多关系的类别,我写了一个小部件,可以选择它们并按应有的方式排列它们,我需要按字母顺序对所有类别进行排序,我做它是这样的:
protected function getTree () {
$tree = [];
foreach ($this->data as $id => &$node) {
if ($node['category_id_1'] == 0) {
$tree[$node['categoryId2']['id']] = &$node['categoryId2'];
} else {
$tree[$node['category_id_1']]['childs'][$node['categoryId2']['id']] = &$node['categoryId2'];
}
}
uasort($tree, function ($a, $b) {
$lower_a = mb_strtolower($a['name']);
$lower_b = mb_strtolower($b['name']);
if ($lower_a == $lower_b) {
return 0;
}
return ($lower_a < $lower_b) ? -1 : 1;
});
for ($i = 0; $i < count($tree); $i++) {
if (!empty($tree[$i]['childs'])) {
uasort($tree[$i]['childs'], function ($a, $b) {
$lower_a = mb_strtolower($a['name']);
$lower_b = mb_strtolower($b['name']);
if ($lower_a == $lower_b) {
return 0;
}
return ($lower_a < $lower_b) ? -1 : 1;
});
}
}
return $tree;
}
粗略地说,在我建立了一个类别树之后,我对它进行了排序,但我只对父类别进行了排序,出于某种原因,孩子们没有改变。需要帮忙。
由于在形成数组时,其中的
$tree
索引不是按顺序排列的,因此不能使用for
带有计数器的常规循环。在这种情况下,适合foreach
: