当前位置: 首页 > 知识库问答 >
问题:

如何在数组树中搜索值?

祝叶五
2023-03-14

这是我的阵列

Array
(
    [category_id] => 4
    [parent_id] => 3
    [name] => Default Category
    [is_active] => 1
    [position] => 4
    [level] => 2
    [children] => Array
        (
            [0] => Array
                (
                    [category_id] => 122
                    [parent_id] => 4
                    [name] => Root 
                    [is_active] => 1
                    [position] => 1
                    [level] => 3
                    [children] => Array
                        (
                            [0] => Array
                                (
                                    [category_id] => 123
                                    [parent_id] => 122
                                    [name] =>  Clothing 
                                    [is_active] => 1
                                    [position] => 1
                                    [level] => 4
                                    [children] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [category_id] => 124
                                                    [parent_id] => 123
                                                    [name] =>  Men Clothing 
                                                    [is_active] => 1
                                                    [position] => 1
                                                    [level] => 5
                                                    [children] => Array
                                                        (
                                                            [0] => Array
                                                                (
                                                                    [category_id] => 125
                                                                    [parent_id] => 124
                                                                    [name] =>  Polos & Tees
                                                                    [is_active] => 1
                                                                    [position] => 1
                                                                    [level] => 6
                                                                    [children] => Array
                                                                        (
                                                                        )

                                                                )

                                                        )

                                                )

                                        )

                                )

                            [1] => Array
                                (
                                    [category_id] => 126
                                    [parent_id] => 122
                                    [name] =>  Fashion 
                                    [is_active] => 1
                                    [position] => 2
                                    [level] => 4
                                    [children] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [category_id] => 127
                                                    [parent_id] => 126
                                                    [name] =>  Footwear 
                                                    [is_active] => 1
                                                    [position] => 1
                                                    [level] => 5
                                                    [children] => Array
                                                        (
                                                            [0] => Array
                                                                (
                                                                    [category_id] => 128
                                                                    [parent_id] => 127
                                                                    [name] =>  Women 
                                                                    [is_active] => 1
                                                                    [position] => 1
                                                                    [level] => 6
                                                                    [children] => Array
                                                                        (
                                                                            [0] => Array
                                                                                (
                                                                                    [category_id] => 129
                                                                                    [parent_id] => 128
                                                                                    [name] =>  Flats
                                                                                    [is_active] => 1
                                                                                    [position] => 1
                                                                                    [level] => 7
                                                                                    [children] => Array
                                                                                        (
                                                                                        )

                                                                                )

                                                                        )

                                                                )

                                                        )

                                                )

                                        )

                                )

                        )

                )

        )

)

我想做的是:写一个函数

foo($find,$array){
    //do some coding to search in the array
    return $category_id;//category id of the coresponding matched name in array 
}

例如:foo(服装,$数组);将返回18foo(男子服装,$数组)将返回19等等

共有2个答案

东郭京
2023-03-14

这是一个具有递归的解决方案:

function foo($find, $array) {
    if( $array['name'] == $find ) {
        return $array['category_id'];
    }

    if( empty($array['children']) ) {
        return null;
    }

    foreach($array['children'] as $child) {
        $result = foo($find, $child);
        if( $result !== null ) {
            return $result;
        }
    }

    return null;
}

echo foo('Default Category', $array), "\n"; // 4
echo foo('Root', $array), "\n"; // 122
echo foo('Clothing', $array), "\n"; // 123
echo foo('Men Clothing', $array), "\n"; // 124
echo foo('Polos & Tees', $array), "\n"; // 125
echo foo('Fashion', $array), "\n"; // 126
echo foo('Footwear', $array), "\n"; // 127
echo foo('Women', $array), "\n"; // 128
echo foo('Flats', $array), "\n"; // 129 
袁鸿畴
2023-03-14

您可以使用递归。这里有一个例子。。

function getId($arr, $val){
    if(is_array($arr)){
        if(isset($arr['name']) && trim($arr['name']) == trim($val)){
            return isset($arr['category_id']) ? $arr['category_id'] : 'Not found';
        }
        foreach($arr as $values){
            if(is_array($values)){
                return getId($values, $val);
            }
        }
    }
}

$val = getId($arr, 'Polos & Tees');
echo $val; //output 20
 类似资料:
  • 问题内容: 我有一个JSON数组 我将如何搜索8097并获取内容? 问题答案: 使用该函数将JSON字符串转换为对象数组,然后遍历该数组直到找到所需的对象:

  • 左右数组是当前索引的左右子级的索引号。如果其中一个为-1,则该子代不存在。如果两者都为-1,则索引处的节点是叶节点。我知道这在现实世界中不太可能实现,但这是一项任务。 不管怎样,我正试图在一个实现这个想法的类中实现一个remove方法。除了一个节点有两个子节点的情况,我让它适用于所有情况。这里的问题是,我调用了一个递归方法(我创建的所有方法都必须是递归的),该方法应该返回包含我要删除的节点的左子树

  • 问题内容: 如何使用preg_match在数组中搜索? 例: 问题答案: 在这篇文章中,我将为您提供三种不同的方法来满足您的要求。 我实际上建议使用最后一个代码段,因为它最容易理解并且代码简洁。 如何查看数组中与我的正则表达式匹配的元素? 有专门用于此目的的功能。它将一个正则表达式作为第一个参数,并将一个数组作为第二个参数。 请参见以下示例: 输出 但是我只想获取指定组的值。怎么样? 与能解决清洁

  • 假设mongodb文档(表)“users”为 我想找到1975年必须获得“国家奖章”的人,可能还有其他人在不同的年份获得该奖项。 我怎样才能找到这个人使用奖励类型和年份。所以我可以得到确切的人。

  • 比如,我有以下实体类: Person.java 以及存储库: PersonRepository。Java语言 是否有一个方法返回所有人,其car数组包含一个给定的car(上面的String参数)? 对我来说,似乎所有支持的JPA关键字都只能处理单个元素,而不能处理数组。 谢谢你的帮助!

  • 本文向大家介绍在Javascript二进制搜索树中搜索值,包括了在Javascript二进制搜索树中搜索值的使用技巧和注意事项,需要的朋友参考一下 我们将使用BST的属性在其中查找元素。首先让我们看一下搜索的迭代实现-  示例 在此功能中,我们从根作为currNode开始,然后将我们的数据与currNode的数据进行比较。如果找到匹配项,则返回true,否则我们将继续根据数据与currNode数据