bug gefunden bei array_intersect?
bugger
- php
Hallo,
<?php
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
print "<pre>";
print_r($result);
print "</pre>";
?>
gibt
Array
(
[a] => green
[0] => red
)
und sollte überhauptkeine übereinstimmung stattfinden...
<?php
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "greeeeeen", "yellow", "reeeeed");
$result = array_intersect($array1, $array2);
print "<pre>";
print_r($result);
print "</pre>";
?>
gibt
Array
(
)
das finde ich aber voll doof lieber wäre mir es würde NICHTS zurückliefern! einfach >""< nichts eben ;)
so muss ich jetzt noch eine abfrage mehr einbauen...
bugger
Hallo,
das finde ich aber voll doof lieber wäre mir es würde NICHTS zurückliefern! einfach >""< nichts eben ;)
so muss ich jetzt noch eine abfrage mehr einbauen...
Warum nicht einfach empty für alle Fälle?
Gruß,
Severin
Servus,
hmmmm...
kannte ich noch gar nicht
und ich dachte ich kenne schon viel... danke
bugger
Hi bugger!
und sollte überhauptkeine übereinstimmung stattfinden...
Wieso nicht? Die Werte "green" und "red" sind doch in beiden Arrays vorhanden.
das finde ich aber voll doof lieber wäre mir es würde NICHTS zurückliefern! einfach >""< nichts eben ;)
Du kannst die automatische Typumwandlung von PHP nutzen: !!$result
liefert dir auf jeden Fall ein boolsches Ergebnis.
MfG H☼psel
Hi Inrgid!
und sollte überhauptkeine übereinstimmung stattfinden...
Ah, jetzt hab´ ich´s verstanden. Dieser "Satz" bezog sich auf den nachfolgenden Code. =)
MfG H☼psel
Hallo Hopsel,
Du kannst die automatische Typumwandlung von PHP nutzen:
!!$result
liefert dir auf jeden Fall ein boolsches Ergebnis.
Iiih! Dafür nimmt man (bool)$result
, soviel Aufwand muss schon sein! :-)
Schöne Grüße,
Johannes
das finde ich aber voll doof lieber wäre mir es würde NICHTS zurückliefern! einfach >""< nichts eben ;)
"" ist aber nicht 'nichts', sondern ein leerer String. NULL kämme dem schon näher.
Übrigens frag ich mich, warum du gleich meinst, einen Bug gefunden zu haben, weil eine Funktion etwas zurückliefert, was dir hauptsächlich etwas mehr Schreibarbeit verschafft.
mfg
Rato
Servus,
naja ein leeres array ist nicht so die feine art das ist doch bei anderen funktionen auch nicht so, oder
bugger
hi,
naja ein leeres array ist nicht so die feine art
Warum soll denn eine Funktion, deren zu erwartender Rückgabewert in der Mehrzahl der Fälle ein Array ist, in so einem Fall kein Array zurückliefern?
Es ist ein leeres Array - wunderbar. Alles andere wäre reichlich blödsinnig.
gruß,
wahsaga
Hallo bugger,
das finde ich aber voll doof lieber wäre mir es würde NICHTS zurückliefern! einfach >""< nichts eben ;)
Es ist ja schade, dass die Funktion nicht so funktioniert, wie du es gerne hättest, aber das macht noch lange keinen Bug aus.
„array_intersect() returns an array containing all the values of array1 that are present in all the arguments.“
Daraus lässt sich erkennen, dass in jedem Fall ein Array zurück gegeben wird, und "alle Werte" sind nunmal identisch mit "keine Werte", falls es keine Übereinstimmungen gibt.
Noch ein kleines Beispiel, das zeigt, dass das von dir gewünschte Verhalten, also die Rückgabe eines leeren Strings "" oder von NULL statt eines leeren Arrays, nicht unbedingt eine Verbesserung der Funktion wäre:
$bar = array('A', 'B');
$foo = array('C', 'D');
$foobar = array_intersect($foo, $bar);
foreach ($foobar as $x) {
// Tue irgendwas mit $x
}
In diesem Fall wird der Schleifeninhalt einfach nicht ausgeführt, würde array_intersect() aber jetzt kein leeres Array sondern irgendetwas anderes zurückgeben, müsste man hierbei erst überprüfen, ob $foobar überhaupt ein Array ist.
Wenn du diese Funktion öfter brauchst, kannst du dir aber einen Wrapper schreiben, der statt eines leeren Arrays irgendwas anderes zurück gibt:
/*
Funktion custom_array_intersect(array $arr1, array $arr2 [, array $...])
Funktioniert wie array_intersect(), gibt aber null statt eines leeren Arrays
zurueck, falls keine Uebereinstimmungen gefunden wurden
*/
function custom_array_intersect () {
$arguments = func_get_args();
$result = call_user_func_array('array_intersect', $arguments);
if (!empty($result)) {
return $result;
} else {
return null; // Oder auch false, "", was immer du haben willst
}
}
Schöne Grüße,
Johannes