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