php - deep search array of arrays and return only matching elements

后端 未结 5 980
忘掉有多难
忘掉有多难 2020-12-18 16:31

I am looking for a solution in php as mentioned in the accepted answer of this question:

javascript - return parent with only child that matches given s

5条回答
  •  一个人的身影
    2020-12-18 16:55

    I was looking to return a result based on an exact match so have modified Manish's answer below with a third parameter of strict. Passing true will return an exact match only.

    public function getParentStackComplete($search, $stack, $strict = false)
    {
        $results = array();
    
        foreach ($stack as $item) {
    
            if (is_array($item)) {
    
                if (array_filter($item, function ($var) use ($search) {
                    return (!is_array($var)) ? stristr($var, $search) : false;
                })) {
                    //echo 'test';
                    $results[] = $item;
    
                    if ($strict) {
                        if ($item['name'] === $search)
                            return $item;
                    }
    
                    continue;
                } else if (array_key_exists('asset_info', $item)) {
                    $find_assets = array();
                    foreach ($item['asset_info'] as $k => $v) {
                        //echo 'abc ';
    
                        if (is_array($v) && array_filter($v, function ($var) use ($search) {
                                return stristr($var, $search);
                            })) {
                            $find_assets[] = $v;
                        }
                    }
                    if (count($find_assets)) {
                        $temp = $item;
                        $temp['asset_info'] = $find_assets;
                        $results[] = $temp;
                    }
    
                }
            }
        }
    
        return $results;
    }
    

提交回复
热议问题