我应该解释为什么我的问题是独一无二的:我的问题是独一无二的,因为提出的解决方案适用于数组的第一个实例,但我想知道如何使用它来处理下一个数组。 THX
我的PHP数组$ kategorien:
Array
(
[0] => Array
(
[order] => 0
[id] => 1
[name] => Other
)
[1] => Array
(
[order] => 1
[id] => 5652372018
[name] => Templates & Addons
[sub] => Array
(
[0] => Array
(
[order] => 1
[id] => 13989101018
[name] => deutsch
[sub] => Array
(
[0] => Array
(
[order] => 0
[id] => 16694354018
[name] => hübsch
)
)
)
[1] => Array
(
[order] => 0
[id] => 13989102018
[name] => english
)
)
)
[2] => Array
(
[order] => 0
[id] => 13989097018
[name] => Domains
)
[3] => Array
(
[order] => 2
[id] => 15403616018
[name] => Service
)
)
我可以使用
按“order”对此数组进行排序function sortiere($a, $b)
{
return strcmp($a['order'], $b['order']);
}
usort($kategorien, 'sortiere')
或
foreach ($kategorien as $key => $row) {
$order[$key] = $row['order'];
}
array_multisort($order, SORT_ASC, $kategorien);
两件作品都得到了
order - 0
id - 1
name - Other
order - 0
id - 13989097018
name - Domains
order - 1
id - 5652372018
name - Templates & Addons
order - 1
id - 13989101018
name - deutsch
order - 0
id - 16694354018
name - hübsch
order - 0
id - 13989102018
name - english
order - 2
id - 15403616018
name - Service
但是我无法对下一个数组进行排序。我需要通过“订单”进行相同的排序:
order - 0
id - 1
name - Other
order - 0
id - 13989097018
name - Domains
order - 1
id - 5652372018
name - Templates & Addons
order - 0 <------------------
id - 13989102018
name - english
order - 1 <-------------------
id - 13989101018
name - deutsch
order - 0
id - 16694354018
name - hübsch
order - 2
id - 15403616018
name - Service
如何将工作函数用于下一个数组?谢谢!
答案 0 :(得分:3)
我会创建一个递归函数,如果[sub]
存在,将对一个级别进行排序并在下一级别重新调用,依此类推。
以下是我的解决方案,它将按order
值对所有级别的所有数组进行排序:
<强>代码强>:
function sortiere($a, $b) { return strcmp($a['order'], $b['order']); }
function sort_by_order(&$arr) {
usort($arr, 'sortiere');
foreach ($arr as $k => $c) {
if (isset($c['sub'])) {
sort_by_order($arr[$k]['sub']);
}
}
return;
}
用法:
$arr = Array(
/* the array with the specific structure as you showed */
);
sort_by_order($arr);
print_r($arr);
<强>演示:强>