Sort array dependent of another array keys values(排序依赖于另一个数组键值的数组)
问题描述
谁能告诉我如何根据每个数组的依赖键对该数组进行排序的示例.我希望数组按依赖顺序排列,所以首先是 jquery,然后是 cookie、bootstrap、checkbox、admin.我看过其他帖子,但它们对我来说没有意义.这是整个数组的一小部分,数组可以是任意顺序和长度.
Can anyone show me an example of how to sort this array dependent on the dependency key of each array. I would like the array to be in order of the dependency so jquery first then cookie,bootstrap,checkbox,admin. I have looked at other posts but they did not make sense to me. This is a small piece of the full array, the array might be in any order and length.
谁能给我看一段代码可以做到这一点.
Can anyone show me a snippet of code that would do this.
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
)
)
)
谢谢
推荐答案
可能有许多不同的方法来解决这个问题.在这里,我循环遍历脚本数组,在添加任何没有进一步依赖关系的脚本之前删除输出数组中已经存在的所有依赖项.
There are probably a number of different approaches to solving this. Here I loop over the array of scripts, removing any dependencies that are already in the output array before adding any scripts with no further dependencies.
我没有对它进行破坏测试,但它适用于您的示例.
I didn't test it to destruction but it works with your example.
$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)
*/
这篇关于排序依赖于另一个数组键值的数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:排序依赖于另一个数组键值的数组
基础教程推荐
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01
- 在多维数组中查找最大值 2021-01-01
- 超薄框架REST服务两次获得输出 2022-01-01
- XAMPP 服务器不加载 CSS 文件 2022-01-01
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01