dokumentacja zaleca
za pomocą generate_subscripts
funkcjonować. Poniższa funkcja emuluje array_search
PHP :
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;
Zwraca indeks pierwszego dopasowania, jeśli jest obecny. Jeśli chcesz wszystkie dopasowania, po prostu zmień RETURNS INT
do RETURNS SETOF INT
. Ta funkcja, jak jest, zwraca NULL
jeśli nie zostanie znalezione dopasowanie.
Ta funkcja działa tylko z tablicami jednowymiarowymi.
Pamiętaj też, że array_search(NULL, a)
zawsze zwraca NULL
, nawet jeśli tablica zawiera elementy null:
> SELECT array_search(null, array[1, 2, null, 4]);
array_search
--------------
(1 row)
Dzieje się tak, ponieważ SQL uwzględnia NULL = NULL
być nieznanym (np. NULL
). Zobacz porównanie funkcji
. Jeśli chcesz array_search
aby móc znaleźć NULL
elementy, zmień
WHERE $2[i] = $1
do
WHERE $2[i] IS NOT DISTINCT FROM $1