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