脚本宝典收集整理的这篇文章主要介绍了php – 如何对类似于链表的条目进行排序?,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
array (size=5) 0 => array (size=3) 'id' => int 14 'parentId' => int 0 'before' => int 15 1 => array (size=3) 'id' => int 15 'parentId' => int 0 'after' => int 14 2 => array (size=3) 'id' => int 9 'parentId' => int 0 'after' => int 15 3 => array (size=3) 'id' => int 8 'parentId' => int 0 'after' => int 9 4 => array (size=3) 'id' => int 1 'parentId' => int 0 'after' => int 14
我不清楚parentId是否对排序有任何意义,但如果没有,这与我本周早些时候回答的this question about sorting an array of Javascript includes by dependency非常相似.
唯一真正的区别是,在按依赖关系排序之前,您需要将这些“之前”条目转换为相应行上的“之后”条目.
$data = [ ["id" => 14,"parentId" => 0,"before" => 15],["id" => 15,"after" => 14],["id" => 9,"after" => 15],["id" => 8,"after" => 9],["id" => 1,"after" => 14] ]; // Use the ID of each element as the array index. $data = array_combine(array_column($data,"id"),$data); // Convert each "after" entry into an array. $data = array_map(function($element) { $element["after"] = isset($element["after"]) ? [$element["after"]] : []; return $element; },$data); // Convert each "before" entry into an "after" entry. foreach ($data as $id => $element) { if (isset($element["before"])) { $data[$element["before"]]["after"][] = $id; unset($data[$id]["before"]); } } // Remove empty "after" entries. $data = array_map(function($element) { if (!count($element["after"])) { unset($element["after"]); } return $element; },$data); $sorted = []; while ($count = count($data)) { // Remove any met dePEndencies. foreach ($data as $id => $element) { if (isset($element["after"])) { foreach ($element["after"] as $after_id => $after_element) { if (isset($sorted[$after_element])) { unset($data[$id]["after"][$after_id]); } } if (!count($data[$id]["after"])) { unset($data[$id]["after"]); } } } // Add elements wITh no more dependencies to the output array. foreach ($data as $id => $element) { if (!isset($element["after"])) { $sorted[$id] = $element; unset($data[$id]); } } if (count($data) == $count) { die("Unresolvable dependency"); } } var_dump($sorted); /* array (size=5) 14 => array (size=2) 'id' => int 14 'parentId' => int 0 15 => array (size=2) 'id' => int 15 'parentId' => int 0 1 => array (size=2) 'id' => int 1 'parentId' => int 0 9 => array (size=2) 'id' => int 9 'parentId' => int 0 8 => array (size=2) 'id' => int 8 'parentId' => int 0 */
以上是脚本宝典为你收集整理的php – 如何对类似于链表的条目进行排序?全部内容,希望文章能够帮你解决php – 如何对类似于链表的条目进行排序?所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。