Skip to content

Instantly share code, notes, and snippets.

@curder
Last active November 10, 2018 11:48
Show Gist options
  • Save curder/0931e23fd7d495bb183643cc9c7fde29 to your computer and use it in GitHub Desktop.
Save curder/0931e23fd7d495bb183643cc9c7fde29 to your computer and use it in GitHub Desktop.
无限极分类和面包屑导航
<?php
/**
* 无限极分类组合多维数组(典型利用场景:多层级导航)
* @param array $categories 数组形式的categories
* @param integer $pid 上级分类id
* @param integer $level 层级
* @param string $html 字符串
* @return array $arr 重组后的二维数据
*/
function get_family($categories, $pid = 0, $level = 0, $html='&nbsp;&nbsp;')
{
$arr = [];
foreach ($categories as $v) {
if ($v['parent_id'] == $pid) {
$v['level'] = $level+1;
$v['html'] = str_repeat($html, $level);
$v['children'] = get_family($categories, $v['id'], $level + 1);
$arr[] = $v;
}
}
return $arr;
}
/**
* 无限极分类组合一维数组 获取所有子级id(典型利用场景:查找pid为0栏目下的商品 合并数组用in在数据中查找数据)
* @param array $categories 数组形式的categories
* @param integer $pid 待查找的父级id
* @return array $arr 所有子级分类id
*/
function get_children_ids($categories, $pid)
{
$arr = [];
foreach ($categories as $v) {
if ($v['parent_id'] == $pid) {
$arr[] = $v['id'];
$arr = array_merge($arr, get_children_ids($categories, $v['id']));
}
}
return $arr;
}
/**
* 无限极分类组合一维数组 获取其所有父级数据(典型使用场景:面包屑导航)
* @param array $categories 数组形式的categories
* @param integer $cid 待查找的cid
* @return array $arr 所有父级栏目信息
*/
function get_parents_id($categories, $cid)
{
$arr = [];
foreach ($categories as $v) {
if ($v['id'] == $cid) {
$arr[] = $v['id'];
$arr = array_merge(get_parents_id($categories, $v['parent_id']), $arr);
}
}
return $arr;
}
/**
* 无限极分类组合一维数组 获取其所有父级数据(典型使用场景:面包屑导航)
* @param array $categories 数组形式的categories
* @param integer $cid 待查找的cid
* @return array $arr 所有父级栏目信息
*/
function get_parents($categories, $cid)
{
$arr = [];
foreach ($categories as $v) {
if ($v['id'] == $cid) {
$arr[] = $v;
$arr = array_merge(get_parents($categories, $v['parent_id']), $arr);
}
}
return $arr;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment