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