array_search mit recursive-search und partial-match

PHP bietet von Haus aus die Funktion array_search an. Diese kann aber nur mit "normalen Arrays" ( eindimesional arbeiten ) - wie dies funktioniert wird in den Beispielen auf PHP.NET beschrieben.

In meinem Falle suchte ich aber eine Funktion die Arrays dieser Form zu durchsuchen.

[0] => array(
'name' => 'mein name',
'name1' => 'mein name1',
'name2' => 'mein name2',
'name3' => 'mein name3',
),
[1] => array(
'name' => 'mein name',
'name1' => 'mein name1',
'name2' => 'mein name2',
'name3' => 'mein name3',
)

Leider liefern die meisten Beispiele bei Rekursion meist nur einen Array-Key zurück und nicht die gesamte Ergebnismenge. Die Kombination aus http://www.php.net/manual/de/function.array-search.php#95926 und http://www.php.net/manual/de/function.array-search.php#88710 führte dann aber zu Erfolg ;)

Anbei das CodeSnippet:

<?php

function _search_in_array ($needle, $haystack, $inverse = false, $limit = 500) {

       
# Settings
       
$path = array ();
       
$count = 0;
       
# Check if inverse
       
if ($inverse == true)
           
$haystack = array_reverse ($haystack, true);
       
# Loop
       
foreach ($haystack as $key => $value) {
           
# Check for return
           
if ($count > && $count == $limit)
            return
$path;
           
# Check for val - also partial match

           
if (($value === $needle ) || (@strpos($value, $needle)!==false) ) {
               
# Add to path
               
$path[] = $key;
               
# Count
               
$count++;
            } else if (
is_array ($value)) {
               
# Fetch subs
               
$sub = _search_in_array ($needle, $value, $inverse, $limit);
               
# Check if there are subs
               
if (count ($sub) > 0) {
                   
# Add to path
                   
$path[$key] = $sub;
                   
# Add to count
                   
$count += count ($sub);
                }
            }
        }
        return
$path;
    }
?>