gpt4 book ai didi

php - 如何在保留树层次结构的同时按字母顺序排列数组?

转载 作者:搜寻专家 更新时间:2023-10-31 21:13:28 24 4
gpt4 key购买 nike

我有 2 个长度/深度未知的数组,看起来像这样

[1] => Hand Tools
[2] => Power Tools
[4] => ╚═►Outdoor Tools
[6] => ╚═►dvjdg
[5] => ╚═►Indoor Tools
[7] => ╚═►blaha
[8] => ╚═►blahb
[3] => Garden Tools

[1] => 0
[2] => 0
[4] => 1
[6] => 2
[5] => 1
[7] => 2
[8] => 2
[3] => 0

两个数组都使用 category id作为数组索引,第二个数组包含每个类别的深度。第一个数组用于生成 HTML <select>输入,但我现在需要按字母顺序排列此数组,同时保持正确的类别层次结构。所以我需要得到一个这样的输出数组。

[3] => Garden Tools
[1] => Hand Tools
[2] => Power Tools
[5] => ╚═►Indoor Tools
[7] => ╚═►blaha
[8] => ╚═►blahb
[4] => ╚═►Outdoor Tools
[6] => ╚═►dvjdg

我怎样才能做到这一点?

最佳答案

考虑到 $list 是您的数组,您不能轻松地对其进行排序,因为每个“子”元素不携带其父元素的信息(文本)。所以首先要做的是添加该信息:

  1. 获得等级。
  2. 设置该级别的当前值。
  3. 删除更高级别。
  4. 将所有级别与文本中未使用的字符合并在一起。

并且您已获得排序键。对所有列表条目执行此操作,您将获得所有排序键:

$sortkeys = [];
$levels = [];
foreach ($list as $index => $entry) {
$level = strspn($entry, ' ');
$levels[$level] = $entry;
$sortkey = implode('|', array_slice($levels, 0, $level + 1));
$sortkeys[$index] = $sortkey;
}

本例简化获取级别信息。我计算了每一级一个空间。为此,您可能拥有和使用与 strspn 不同的函数。您很可能会为此使用第二个阵列。懒得打字了,就用函数搞定了。你可能只是:

$level = $category_levels[$index];

现在您可以根据$sortkeys 数组对$list 数组进行排序。这可以通过 PHP 的 array_multisort 来完成功能。因为该函数会对数字键重新编号,所以我们也对键进行排序,然后在排序后合并以保留它们:

$keys = array_keys($list);
array_multisort($sortkeys, SORT_ASC, $list, $keys);

print_r(array_combine($keys, $list));

这给了你:

Array
(
[3] => Garden Tools
[1] => Hand Tools
[2] => Power Tools
[5] => ╚═►Indoor Tools
[7] => ╚═►blaha
[8] => ╚═►blahb
[4] => ╚═►Outdoor Tools
[6] => ╚═►dvjdg
)

观看完整的示例运行:Demo

关于php - 如何在保留树层次结构的同时按字母顺序排列数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14086698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com