যদিও ফস্কোর উত্তরটি ভুল নয় তবে এইটির সাথে বিবেচনা করার মতো একটি মামলা রয়েছে : মিশ্র অ্যারেগুলি। কল্পনা করুন আমার এর মতো অ্যারে রয়েছে:
$a = array(
"nice",
"car" => "fast",
"none"
);
এখন, পিএইচপি এই ধরণের সিনট্যাক্সের অনুমতি দেয় তবে এটির একটি সমস্যা রয়েছে: আমি যদি ফস্কোর কোডটি চালাই তবে আমার কাছে 0
যা ভুল তা কিন্তু এটি কেন ঘটে?
কারণ স্ট্রিং এবং পূর্ণসংখ্যার মধ্যে তুলনা করার সময় পিএইচপি স্ট্রিংগুলিকে পূর্ণসংখ্যায় রূপান্তর করে (এবং এটি আমার মতে মূর্খতা), সুতরাং যখন 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
, যা সঠিক।
সম্পাদনা:
শন যেমন নীচের মন্তব্যে উল্লেখ করেছেন, একই জিনিস সূচক মানের ক্ষেত্রে প্রযোজ্য, যদি আপনি এর মতো কোনও ইনটেক্স অনুসন্ধান করতে চান:
$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)));