Поиск в многомерном массиве (PHP)

В последнее время у меня проблема, которая сводит меня с ума. У меня такой многомерный массив:

$a = array( 'db' => array( '0' => array( 'id' => '1', 'name' => 'test', 'cat' => array( 'a' => '15', 'b' => '20', 'c' => '30' ), 'canvas' => '2' ), '1' => array( 'id' => '2', 'name' => 'test2', 'cat' => array( 'a' => '15', 'b' => '20', 'c' => '30' ), 'canvas' => '2' ) '2' => array( 'id' => '3', 'name' => 'test', 'cat' => array( 'a' => '50', 'b' => '40', 'c' => '90' ), 'canvas' => '1' ) ) ); 

И я хочу искать на нем, используя такую ​​функцию: search ('canvas = 1');

Это вернет все массивы, дочерние элементы db, которые имеют ключевой холст со значением 1. Или, например:

поиск ('a = 15');

Вернул бы все массивы, у которых есть ключ, ребенок кошки, названный a и имеющий значение 15.

 $a = array( 'db' => array( '0' => array( 'id' => '1', 'name' => 'test', 'cat' => array( 'a' => '15', 'b' => '20', 'c' => '30' ), 'canvas' => '2' ), '1' => array( 'id' => '2', 'name' => 'test2', 'cat' => array( 'a' => '15', 'b' => '20', 'c' => '30' ), 'canvas' => '2' ), ) ); //checks if array $array contains element with $searchKey key, and $searchVal value function arrayContains($array, $searchVal, $searchKey) { if (!is_array($array)) return false; foreach ($array as $key => $value) { if ($key === $searchKey && $searchVal === $value) return true; if (is_array($value) && arrayContains($value, $searchVal, $searchKey)) return true; } return false; } function search($a, $search) { list($searchKey, $searchVal) = explode('=', $search); $result = array(); foreach($a as $val) { if (arrayContains($val, $searchVal, $searchKey)) $result[] = $val; } return $result; } print_r(search($a['db'], "a=15")); print_r(search($a['db'], "canvas=1")); 

Который производит этот вывод (выводит под-массивы $ a ['db'], которые содержат найденную пару ключей => значение):

 Array ( [0] => Array ( [id] => 1 [name] => test [cat] => Array ( [a] => 15 [b] => 20 [c] => 30 ) [canvas] => 2 ) [1] => Array ( [id] => 2 [name] => test2 [cat] => Array ( [a] => 15 [b] => 20 [c] => 30 ) [canvas] => 2 ) ) Array ( [0] => Array ( [id] => 3 [name] => test [cat] => Array ( [a] => 50 [b] => 40 [c] => 90 ) [canvas] => 1 ) ) 

Просто проверьте приведенную ниже ссылку, если это вам поможет – http://php.net/manual/en/function.array-search.php

Он содержит подробную документацию по функции php array_search() и различные коды пользователей для поиска в многомерном массиве наряду с обзорами пользователей.

 function search($array, $canvas) { $result = array(); foreach ($array as $k1 => $v1) { foreach ($v1 as $k2 => $v2) { if ($v2['canvas'] == $canvas) { $result[] = $array[$k1][$k2]; } } } return $result; } // $a = your array print_r(search($a, 1));