Loading...
Помощь по скриптам | Кто хорошо знаком сортировка пузыря?
Нужно из этого кода реализовать usort() но почему то ни как сделать.


$components = [
'mail' => [
'name' => 'mail',
'requires' => ['account']
],
'user' => [
'name' => 'user',
'requires' => ['mail']
],
'account' => [
'name' => 'account',
'requires' => []
]
];

foreach($components as $main_name => $main_component) {
foreach($components as $next_name => $next_component) {
if (!in_array($main_name, $next_component['requires'])) {
$temp = $components[$next_name];
$components[$next_name] = $components[$main_name];
$components[$main_name] = $temp;
}
}
}

$last_components = $components;
$components = [];
foreach($last_components as $component) {
$components[$component['name']] = $component;
}


То есть надо соритровать компонентов порядок если имеет требование другого компонента.
________
посл. ред. 08.07.2019 в 07:01; всего 2 раз(а); by JMCode
Уже намучался 2 час..
Сделал так но выходит не правильный порядок требование


usort($components, function($l, $r) {
if (in_array($r['name'], $l['requires'])) {
return 1;
}
if (in_array($l['name'], $r['requires'])) {
return -1;
}
return 0;
});


То результат видим не правильный порядок...

Array
(
[0] => Array
(
[name] => account
[requires] => Array
(
)

)

[1] => Array
(
[name] => comment
[requires] => Array
(
[0] => account
[1] => user
)

)

[2] => Array
(
[name] => mail
[requires] => Array
(
[0] => account
)

)

[3] => Array
(
[name] => user
[requires] => Array
(
[0] => mail
)

)

)
Наконец сработал...


$components = [
'comment' => [
'requires' => ['account', 'user']
],
'mail' => [
'requires' => ['account']
],
'user' => [
'requires' => ['mail']
],
'account' => [
'requires' => []
]
];

uksort($components, function ($main, $next) use ($components) {
if ($components[$main]['requires'] == $components[$next]['requires']) return 0;
if (!in_array($main, $components[$next]['requires'])) return 1;
if (!in_array($next, $components[$main]['requires'])) return -1;
});
Онлайн: 2
Время:
Gen. 0.1
(c) Bym.Guru 2010-2025