Использование preg_match в многомерном массиве для возврата массивов ключевых значений

У меня есть массив, который структурирован как таковой:

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

Я хочу использовать preg_match с циклом foreach для выполнения поиска в массивах, содержащихся в $ data, и возвращать вложенные массивы пар значений.

Related of "Использование preg_match в многомерном массиве для возврата массивов ключевых значений"

Что-то вроде этого?

 <?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>'; ?> 

для гуглеров там есть лучший код

 $data = <as above> $pattern = "/whatever/"; $matches = array_filter($data, function($a) use($pattern) { return preg_grep($pattern, $a); }); 

Если вы используете PHP 5.5 и просматриваете этот вопрос в 2015 году, это может быть более простой ответ:

 $elements= array_column($array, 1); //Where 1 is the name of the column or the index $foundElements = preg_grep("/regex/i", $elements); 
 $c=['abccd','123','12qw']; // where u'll search $a = Array('/a/i', '/\d/i', '/\d+\w/i'); // what is $b = array_map(function($a,$c){return (preg_match_all($a,$c,$m))? ($m[0][0]) : '';}, $a,$c); print_r($b); 
 preg_grep('/needle/iu', array_column($haystack, "columnName", "keyName" ) ); 

Нечувствительный к регистру unicode grep для столбца columnName в массиве $haystack