我想在父类别中显示子类别
我正在使用green
来获得像这样的数组:
$categories
我正在使用此代码检查category是否有孩子
[5] => Array
(
[id] => 5
[parent_id] => 4
)
[4] => Array
(
[id] => 5
[parent_id] => 0
)
[3] => Array
(
[id] => 3
[parent_id] => 1
)
[1] => Array
(
[id] => 1
[parent_id] => 0
)
从数据库获取数组
if (array_search($category['id'], array_column($categories, 'parent_id'))) {
echo "This category has children";
}
因此可以帮助我获取找到$categories = load_categories(array('db_table' => 'pm_categories'));
的数组的ID
答案 0 :(得分:2)
如果我对您的理解正确,那么您正在尝试搜索多维数组并返回该数组的子集。这个问题很好地解决了这个问题。 How to search by key=>value in a multidimensional array in PHP
在您的情况下,只需检查“ parent_id”是否具有值而不是等于值,结果数组将具有所有子类别。
希望这会有所帮助!
答案 1 :(得分:1)
array_search()
返回找到的元素的索引。您可以将其保存在变量中,然后使用它为数组建立索引。
$index = array_search($category['id'], array_column($categories, 'parent_id'));
if ($index !== false) {
$categories_indexed = array_values($categories);
$id = $categories_indexed[$index]['id'];
}
如果您需要获取所有具有父ID的类别,而不仅仅是第一个,请使用array_filter()
$matching_categories = array_filter($categories, function ($cat) use ($category) {
return $cat['parent_id'] == $category['id'];
});
$ids = array_column($matching_categories, 'id');
顺便说一句,您永远不要使用if (array_search(...))
。如果找到的元素是数组的第一个元素,它将返回索引0
。在false
语句中将其视为if
,因此将其错误地视为未找到。
答案 2 :(得分:1)
您不需要array_search
来检查当前类别是否有孩子:
<?php
$category_childs = array_filter($categories, function($_category) use ($category){
return $_category['parent_id'] == $category['id'];
});
if($category_childs){
echo 'This category has childs';
}
$category_childs_ids = array_column($category_childs, 'id');