У меня есть массив, который структурирован как таковой:
$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, и возвращать вложенные массивы пар значений.
Что-то вроде этого?
<?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