在多维数组上使用preg_match返回键值数组

JP1*_*971 3 php foreach key-value preg-match

我有一个结构如下的数组:

$data = array(
    "abc"=>array(
            "label" => "abc",
            "value" => "def",
            "type" => "ghi",
            "desc" => "jkl",
            ),
    "def"=>array(
            "label" => "mno",
            "value" => "qrs",
            "type" => "tuv",
            "desc" => "wxyz",
            ),
    );
Run Code Online (Sandbox Code Playgroud)

我想使用带有foreach循环的preg_match来对$ data中包含的数组执行搜索,并返回键值对的嵌套数组.

use*_*291 15

对于那里的googlers来说,这是更好的代码

$data = <as above>
$pattern = "/whatever/";

$matches = array_filter($data, function($a) use($pattern)  {
    return preg_grep($pattern, $a);
});
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,我从未使用过 array_filter 或 preg_grep。* *咕哝* * 我现在要(重新)编写一些代码...... (2认同)

Jon*_*uhn 7

像这样的东西?

<?php
$data = array(
    "abc"=>array(
            "label" => "abc",
            "value" => "def",
            "type" => "ghi",
            "desc" => "jkl",
            ),
    "def"=>array(
            "label" => "mno",
            "value" => "qrs",
            "type" => "tuv",
            "desc" => "wxyz",
            ),
    );

$matches = array();
$pattern = "/a/i";  //contains an 'a'
//loop through the data
foreach($data as $key=>$value){
    //loop through each key under data sub array
    foreach($value as $key2=>$value2){
        //check for match.
        if(preg_match($pattern, $value2)){
            //add to matches array.
            $matches[$key]=$value;
            //match found, so break from foreach
            break;
        }
    }
}
echo '<pre>'.print_r($matches, true).'</pre>';
?>
Run Code Online (Sandbox Code Playgroud)