दस्तावेज अनुशंसा करता है
generate_subscripts
. का उपयोग करके समारोह। नीचे दिए गए फ़ंक्शन के PHP के 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;
यह पहले मैच की अनुक्रमणिका देता है, यदि मौजूद है। यदि आप सभी मैच चाहते हैं, तो बस RETURNS INT
बदलें करने के लिए RETURNS SETOF INT
. यह फ़ंक्शन, जैसा है, NULL
लौटाता है अगर कोई मेल नहीं मिलता है।
यह फ़ंक्शन केवल एक-आयामी सरणियों के साथ काम करता है।
साथ ही, ध्यान रखें कि array_search(NULL, a)
हमेशा NULL
लौटाता है , भले ही सरणी में अशक्त तत्व हों:
> SELECT array_search(null, array[1, 2, null, 4]);
array_search
--------------
(1 row)
ऐसा इसलिए है क्योंकि SQL NULL = NULL
को मानता है अज्ञात होना (यानी NULL
) देखें functions-comparison
. अगर आप array_search
चाहते हैं NULL
find खोजने में सक्षम होने के लिए तत्व, परिवर्तन
WHERE $2[i] = $1
करने के लिए
WHERE $2[i] IS NOT DISTINCT FROM $1