Использование preg_match в многомерном массиве для возврата массивов значений ключа - PullRequest
3 голосов
/ 08 июня 2011

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

$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, и вернуть вложенные массивы значения ключапар.

Ответы [ 6 ]

15 голосов
/ 08 июня 2011

для гуглеров, вот лучший код

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

$matches = array_filter($data, function($a) use($pattern)  {
    return preg_grep($pattern, $a);
});
7 голосов
/ 08 июня 2011

Как то так?

<code><?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).'
';?>
1 голос
/ 17 апреля 2015

Если вы используете 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);
0 голосов
/ 10 октября 2018

preg_match_all возвращает строки, которые соответствуют шаблону с определенным именем столбца.

$pattern = "/REDUCTION/i";
$reductions = array_filter($data, function($a) use($pattern)  {
    return preg_match_all($pattern, $a['budget']);
});
0 голосов
/ 23 июля 2017
preg_grep('/needle/iu', array_column($haystack, "columnName", "keyName" ) );

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

0 голосов
/ 17 декабря 2012
$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);
...