任何人都可以向我展示如何根据每个数组的依赖关系键对此数组进行排序的示例。我希望数组按依赖顺序排列,所以首先是jquery然后是cookie,bootstrap,checkbox,admin。我看过其他帖子,但对我来说没有意义。这是完整数组的一小部分,数组可能是任何顺序和长度。
任何人都可以向我展示一段可以执行此操作的代码。
Array
(
[0] => Array
(
[name] => jquery
[version] => 1.1
[file] => vendor/jquery/jquery.js
)
[1] => Array
(
[name] => cookie
[version] => 1.0
[file] => vendor/cookie/cookie.js
[dependency] => Array
(
[0] => administration
[1] => jquery
)
)
[2] => Array
(
[name] => bootstrap
[version] => 1.0
[file] => vendor/bootstrap/js/bootstrap.js
[dependency] => Array
(
[0] => jquery
)
)
[3] => Array
(
[name] => checkbox
[version] => 1.0
[file] => vendor/checkbox/checkbox.js
[dependency] => Array
(
[0] => jquery
[1] => sticky
)
)
[4] => Array
(
[name] => datepicker
[version] => 1.0
[file] => vendor/datepicker/datepicker.js
[dependency] => Array
(
[0] => jquery
)
)
[5] => Array
(
[name] => nanobar
[version] => 1.0
[file] => vendor/nanobar/nanobar.js
[dependency] => Array
(
[0] => jquery
)
)
[6] => Array
(
[name] => owlcarousel
[version] => 1.0
[file] => vendor/owlcarousel/owlcarousel.js
[dependency] => Array
(
[0] => jquery
)
)
[7] => Array
(
[name] => selectmultiple
[version] => 1.0
[file] => vendor/selectmultiple/selectmultiple.js
[dependency] => Array
(
[0] => jquery
)
)
[8] => Array
(
[name] => selectric
[version] => 1.0
[file] => vendor/selectric/selectric.js
[dependency] => Array
(
[0] => jquery
)
)
[9] => Array
(
[name] => sortable
[version] => 1.0
[file] => vendor/sortable/sortable.js
[dependency] => Array
(
[0] => jquery
)
)
[10] => Array
(
[name] => uisortableanimation
[version] => 1.0
[file] => vendor/uisortableanimation/uisortableanimation.js
[dependency] => Array
(
[0] => jquery
)
)
[11] => Array
(
[name] => summernote
[version] => 1.0
[file] => vendor/summernote/summernote.js
[dependency] => Array
(
[0] => jquery
)
)
[12] => Array
(
[name] => validation
[version] => 1.0
[file] => vendor/validation/validation.js
[dependency] => Array
(
[0] => jquery
)
)
[13] => Array
(
[name] => sticky
[version] => 1.0
[file] => vendor/sticky/sticky.js
[dependency] => Array
(
[0] => cookie
[1] => jquery
)
)
[14] => Array
(
[name] => jrate
[version] => 1.0
[file] => vendor/jrate/jrate.js
[dependency] => Array
(
[0] => jquery
)
)
[15] => Array
(
[name] => retina
[version] => 1.1
[file] => vendor/retina/retina1.js
[dependency] => Array
(
[0] => jquery
)
)
[16] => Array
(
[name] => confirmation
[version] => 1.0
[file] => vendor/confirmation/confirmation.js
[dependency] => Array
(
[0] => jquery
)
)
[17] => Array
(
[name] => bootstrapfilestyle
[version] => 1.0
[file] => vendor/bootstrapfilestyle/bootstrap-filestyle.js
[dependency] => Array
(
[0] => jquery
)
)
[18] => Array
(
[name] => minicolors
[version] => 1.0
[file] => vendor/minicolors/minicolors.js
[dependency] => Array
(
[0] => jquery
)
)
[19] => Array
(
[name] => administration
[version] => 1.0
[file] => javascript/index.js
[dependency] => Array
(
[0] => jquery
[1] => bootstrap
[2] => checkbox
[3] => datepicker
[4] => nanobar
[5] => owlcarousel
[6] => selectmultiple
[7] => selectric
[8] => sortable
[9] => uisortableanimation
[10] => summernote
[11] => validation
[12] => jrate
[13] => retina
[14] => confirmation
[15] => bootstrapfilestyle
[16] => minicolors
)
)
)
谢谢
答案 0 :(得分:0)
可能有许多不同的方法来解决这个问题。在这里,我循环遍历脚本数组,删除任何已经存在于输出数组中的依赖项,然后添加任何没有其他依赖项的脚本。
我没有对它进行破坏测试,但它适用于你的例子。
$sorted = [];
while ($count = count($scripts)) {
// Remove any met dependencies.
foreach ($scripts as $script_id => $script) {
if (isset($script["dependency"])) {
foreach ($script["dependency"] as $dep_id => $dep) {
if (isset($sorted[$dep])) {
unset($scripts[$script_id]["dependency"][$dep_id]);
}
}
if (!count($scripts[$script_id]["dependency"])) {
unset($scripts[$script_id]["dependency"]);
}
}
}
// Add scripts with no more dependencies to the output array.
foreach ($scripts as $script_id => $script) {
if (!isset($script["dependency"])) {
$sorted[$script["name"]] = $script;
unset($scripts[$script_id]);
}
}
if (count($scripts) == $count) {
die("Unresolvable dependency");
}
}
var_dump(array_values($sorted));
/*
array (size=5)
0 =>
array (size=3)
'name' => string 'jquery' (length=6)
'version' => string '1.1' (length=3)
'file' => string 'vendor/jquery/jquery.js' (length=23)
1 =>
array (size=3)
'name' => string 'cookie' (length=6)
'version' => string '1.0' (length=3)
'file' => string 'vendor/cookie/cookie.js' (length=23)
2 =>
array (size=3)
'name' => string 'bootstrap' (length=9)
'version' => string '1.0' (length=3)
'file' => string 'vendor/bootstrap/js/bootstrap.js' (length=32)
3 =>
array (size=3)
'name' => string 'checkbox' (length=8)
'version' => string '1.0' (length=3)
'file' => string 'vendor/checkbox/checkbox.js' (length=27)
4 =>
array (size=3)
'name' => string 'admin' (length=5)
'version' => string '1.0' (length=3)
'file' => string 'vendor/admin/code.js' (length=20)
*/