多维php数组中的递归多重匹配

时间:2016-05-06 02:51:30

标签: php multidimensional-array

我需要匹配multidimesional数组中的所有“关键字”:

$array = array(
    'green' => 'keyword',
    'orange',
    'keyword',
    'black' => array(
        'purple' => 'text',
        'brown',
        'pink' => 'keyword'
    ),
    'white' => array(
        'red',
        'yellow' => 'keyword',
        'blue'
    ),
    'violet',
    'gray'
);

然后我想访问匹配结果,如:

$matches[0][0]
$matches[2]
$matches[3][2]
.... 

我应该使用什么?我尝试使用array_filter但不起作用..它也可能必须是递归的

function findInArray($array){
    $array = array_filter($array, function($array){
        return ($array == 'keyword');
    });
    return $array;
}

1 个答案:

答案 0 :(得分:1)

您可以使用array_filter完成此事。

在线检查3v4l.org

$arr = array();

$str = 'keyword';
$arr[] = array_filter($array, function($var) use ($str) {
            global $arr;
            if(is_array($var)){             
                $arr[] = array_filter($var, function($var2) use ($str) {
                    return preg_match("/$str/i", $var2);
                });
            }else{
                return preg_match("/$str/i", $var);
            }           
        });

function getL2Keys($array){
    $result = array();
    foreach($array as $sub) {
        $result = array_merge($result, $sub);
    }        
    return $result;
}

$arr = getL2Keys($arr);

结果:

Array
(
    [pink] => keyword
    [yellow] => keyword
    [green] => keyword
    [0] => keyword
)