从多数组中获取另一个键值

时间:2018-09-04 02:47:41

标签: php

我想在父类别中显示子类别

我正在使用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";
}

enter image description here

因此可以帮助我获取找到$categories = load_categories(array('db_table' => 'pm_categories')); 的数组的ID

3 个答案:

答案 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');