, preg_match():
function match($search, $subject)
{
$search = str_replace('/', '\\/', $search);
return preg_match("/$search/i", (string)$subject);
}
function like_search_r($array, $key, $value, array &$results = [])
{
if (!is_array($array)) {
return;
}
$key = (string)$key;
$value = (string)$value;
foreach ($array as $arrayKey => $arrayValue) {
if (match($key, $arrayKey) && match($value, $arrayValue)) {
$results[] = $array;
}
if (is_array($arrayValue)) {
like_search_r($arrayValue, $key, $value, $results);
}
}
}
$array1 = [
'foo' => 'bar',
'subarr' => [
'test' => 'val',
'dangerous/characters' => 1,
],
];
$results1 = [];
like_search_r($array1, 'fo', 'bar', $results1);
print_r($results1);
$results2 = [];
like_search_r($array1, 'est', 'val', $results2);
print_r($results2);
$results3 = [];
like_search_r($array1, 's/c', 1, $results3);
print_r($results3);
:
function match($search, $subject) { }
function like_search_r($array, $key, $value, array &$results = [], $level = 0)
{
if (!is_array($array)) {
return false;
}
$key = (string)$key;
$value = (string)$value;
$found = false;
foreach ($array as $arrayKey => $arrayValue) {
if (match($key, $arrayKey) && match($value, $arrayValue)) {
return true;
}
if (is_array($arrayValue)) {
if (like_search_r($arrayValue, $key, $value, $results, $level+1)) {
if ($level == 1) {
$results[] = $array;
}
$found = true;
}
}
}
return $found;
}
$array2 = [['id' => 0, 'values' => ['name' => 'bill']], ['id' => 1, 'values' => ['name' => 'john']]];
$results4 = [];
like_search_r($array2, 'name', 'john', $results4);
print_r($results4);