tài liệu khuyến nghị
sử dụng generate_subscripts
hàm số. Hàm bên dưới array_search
của PHP mô phỏng :
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;
Điều này trả về chỉ số của trận đấu đầu tiên, nếu có. Nếu bạn muốn tất cả các kết quả phù hợp, chỉ cần thay đổi RETURNS INT
thành RETURNS SETOF INT
. Hàm này, như vậy, trả về NULL
nếu không tìm thấy kết quả phù hợp.
Hàm này chỉ hoạt động với mảng một chiều.
Ngoài ra, hãy nhớ rằng array_search(NULL, a)
luôn trả về NULL
, ngay cả khi mảng chứa các phần tử rỗng:
> SELECT array_search(null, array[1, 2, null, 4]);
array_search
--------------
(1 row)
Điều này là do SQL coi NULL = NULL
được không xác định (tức là NULL
). Xem các hàm-so sánh
. Nếu bạn muốn array_search
để có thể tìm thấy NULL
các yếu tố, thay đổi
WHERE $2[i] = $1
đến
WHERE $2[i] IS NOT DISTINCT FROM $1