Die Dokumentation empfiehlt
mit generate_subscripts Funktion. Die folgende Funktion emuliert PHPs array_search :
CREATE FUNCTION array_search(needle ANYELEMENT, haystack ANYARRAY)
RETURNS INT AS $$
SELECT i
FROM generate_subscripts($2, 1) AS i
WHERE $2[i] = $1
ORDER BY i
$$ LANGUAGE sql STABLE;
Dies gibt den Index der ersten Übereinstimmung zurück, falls vorhanden. Wenn Sie alle Übereinstimmungen wollen, ändern Sie einfach RETURNS INT zu RETURNS SETOF INT . Diese Funktion gibt unverändert NULL zurück wenn keine Übereinstimmung gefunden wird.
Diese Funktion funktioniert nur mit eindimensionalen Arrays.
Denken Sie auch daran, dass array_search(NULL, a) gibt immer NULL zurück , auch wenn das Array Null-Elemente enthält:
> SELECT array_search(null, array[1, 2, null, 4]);
array_search
--------------
(1 row)
Dies liegt daran, dass SQL NULL = NULL berücksichtigt unbekannt sein (d.h. NULL ). Siehe Funktionsvergleich
. Wenn Sie array_search möchten um NULL finden zu können Elemente, ändern
WHERE $2[i] = $1
zu
WHERE $2[i] IS NOT DISTINCT FROM $1