Tom: Verzweigtes Array nach einem Wert durchsuchen

Beitrag lesen

Hello,

habe mal so zum Spaß einen Lösungsansatz dafür erzeugt:

<?php  ### find_deep_key.php ###

einen Arraykey finden für einen Wert, der in einem verzweigten Array versteckt ist

$needle = 'treffer';

$_haystack = array();
$_haystack['first']  = array();
$_haystack['second'] = array();
$_haystack['third']  = array();
$_haystack['forth']  = $needle;
$_haystack['fifth']  = array();

$_haystack['first']['eins'] = 'leider';
$_haystack['first']['zwei'] = 'kein';
$_haystack['first'][3] = 'treffer';

$_haystack['second'][0] = array();
$_haystack['second'][1] = $needle;

echo "<pre>\r\n";
echo htmlspecialchars(print_r($_haystack,1));
echo "</pre>\r\n";

#-----------------------------------------------------------
function find_hits($_haystack, $needle, &$_hits, $keyrank)
{

foreach($_haystack as $key => $value)
    {
        if (is_array($value))
        {
            find_hits($value, $needle, $_hits, $keyrank."[$key]");
        }
        elseif ($value == $needle)
        {
            $_hits[] = $keyrank."[$key]";
        }
    }
}
#-----------------------------------------------------------

$_hits = array();
$keyrank = '';
$keyrank = '$_haystack';

find_hits($_haystack, $needle, $_hits, $keyrank);

echo "<pre>\r\n";
echo htmlspecialchars(print_r($_hits,1));
echo "</pre>\r\n";

?>

Das ergibt dann:

Array
(
    [first] => Array
        (
            [eins] => leider
            [zwei] => kein
            [3] => treffer
        )

[second] => Array
        (
            [0] => Array
                (
                )

[1] => treffer
        )

[third] => Array
        (
        )

[forth] => treffer
    [fifth] => Array
        (
        )

)

Array
(
    [0] => $_haystack[first][3]
    [1] => $_haystack[second][1]
    [2] => $_haystack[forth]
)

Ist natürlich nur eine Grundidee und noch optimierungsbedürftig.

Liebe Grüße aus Syburg bei Dortmund

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de