जबकि फ़ॉस्को का जवाब गलत नहीं है, इस मामले पर विचार करने के लिए एक मामला है : मिश्रित सरणियां। कल्पना कीजिए कि मेरे पास एक सरणी है:
$a = array(
"nice",
"car" => "fast",
"none"
);
अब, PHP इस तरह के सिंटैक्स की अनुमति देता है, लेकिन इसमें एक समस्या है: अगर मुझे फॉस्को का कोड मिलता है, 0 जो मेरे लिए गलत है, लेकिन ऐसा क्यों होता है?
क्योंकि स्ट्रिंग्स और पूर्णांकों के बीच तुलना करते समय PHP स्ट्रिंग्स को पूर्णांकों में परिवर्तित करता है (और यह मेरे विचार में थोथा बेवकूफ है), इसलिए जब array_search()सूचकांक की खोज होती है तो यह पहले बंद हो जाता है क्योंकि यह स्पष्ट रूप ("car" == 0) से सच है । सख्त मोड में
सेट array_search()करने से समस्या का समाधान नहीं होगा क्योंकि तब array_search("0", array_keys($a))भी यदि कोई ऐसा तत्व है जो इंडेक्स 0 के साथ मौजूद है तो भी गलत होगा।
इसलिए मेरा समाधान सिर्फ सभी अनुक्रमों array_keys()को तार से परिवर्तित करता है और फिर उनकी तुलना सही ढंग से करता है:
echo array_search("car", array_map("strval", array_keys($a)));
प्रिंट 1, जो सही है।
EDIT:
जैसा कि शॉन ने नीचे टिप्पणी में बताया है, यही बात इंडेक्स वैल्यू पर भी लागू होती है, यदि आप इस पर एक इंडेक्स इंडेक्स की खोज करते हैं:
$a = array(
"foo" => "bar",
"nice",
"car" => "fast",
"none"
);
$ind = 0;
echo array_search($ind, array_map("strval", array_keys($a)));
आप हमेशा प्राप्त करेंगे 0, जो गलत है, इसलिए इसका समाधान इंडेक्स को डालना होगा (यदि आप एक चर का उपयोग करते हैं) इस तरह से एक स्ट्रिंग के लिए:
$ind = 0;
echo array_search((string)$ind, array_map("strval", array_keys($a)));