phpbar.de logo

Mailinglisten-Archive

[php] Mehrdimensionales Array prüfen ob Key existiert

[php] Mehrdimensionales Array prüfen ob Key existiert

Sebastian Mendel lists at sebastianmendel.de
Mit Jul 25 13:53:09 CEST 2007


Norbert Pfeiffer schrieb:
> Hai,
> 
>>> na-ja, es scheint halt doch etwas zu dauern, bis man alle
>>> Bug-Moeglichkeiten von PHP ausgetestet hat.
>> Welche Bugs?
>> Die in PHP oder die in dem geschrieben Script?
> beide Arten ... ;-)
> 
>>> Damit auch andere testen koennen, gibt es eine Adresse:
>>> http://www.uris.de/test/search.key.php
>> würde eine Suche nach '' nicht auch den Schlüssel 0 finden?
> nein!
> siehe aktualisiertes Demoscript.

ja stimmt, da hatte ich ein falsches Beispiel


> Ansonsten ist es immer besser, etwas kurz zu testen,
> bevor man sich oeffentlich den Kopf zermartert:

brauch ich nicht (den Kopf zermartern) - denn ich weis es


> <?php
> var_dump(array('0'=>'zero-String', 0 =>'zero-Number'));
> var_dump(array( 0 =>'zero-Number','0'=>'zero-String'));
> ?>
> beendet alle Fragen, weil:
> PHP definitionsgemaess alles auf String castet.

??? Blödsinn (sorry)

in dem obigen Fall wird aus "0" immer 0, weis nicht wo hier irgendwas zum
String geändert wird oder du diesen Schluss ziehst oder du hast eine
gänzlich andere PHP Version als ich und als die die im Handbuch beschrieben
wird ... man sollte vielleicht mal im Handbuch lesen ...


> Genau dies macht auch das Testscript ...

warum auch immer, und was auch immer das mit meinem Ursprünglich
angesprochenen Problem zu tun hat, den das besteht immer noch:

denn "01" == 1 aber "01" !== 1

und das beachtet dein Script nicht

<?php
function arrayKeyExistsR($array, $search, $typesafe = false)
{
    foreach ($array as $key => $val) {
        if (! $typesafe && $key == $search) {
            return true;
        } elseif ($typesafe && $key === $search) {
            return true;
        } elseif (is_array($val)) {
            return arrayKeyExistsR($val, $search, $typesafe);
        }
    }

    return false;
}

$array = array(
    '01' => 'isset',
);

echo "\n<br />" . 'found with loose type comparison:';
print_r(arrayKeyExistsR($array, 1, false));
echo "\n<br />" . 'found with strict type comaprison:';
print_r(arrayKeyExistsR($array, 1, true));
?>


-- 
Sebastian

php::bar PHP Wiki   -   Listenarchive