পিএইচপি - সহযোগী অ্যারের সংখ্যার সূচক পান


154

আমার একটি সহযোগী অ্যারে আছে এবং আমার একটি কী এর সংখ্যাসূচক অবস্থানটি সন্ধান করতে হবে। এটি খুঁজতে আমি অ্যারে থেকে নিজে লুপ করতে পারি, তবে পিএইচপি-র মধ্যে আরও ভাল কোনও বিল্ড তৈরি হতে পারে?

$a = array(
  'blue'   => 'nice',
  'car'    => 'fast',
  'number' => 'none'
);

// echo (find numeric index of $a['car']); // output: 1

উত্তর:


272
echo array_search("car",array_keys($a));

5
পিএইচপি কোনও সাহসী অ্যারের ক্রমের গ্যারান্টি দেয়?
কেভিন বার্ক

7
@ কেভিনবুর্ক আপনি কোনও সাজানোর কাজ ব্যবহার না করা হলে এটি পুনরায় অর্ডার করবে না। আপনি কী ধরণের গ্যারান্টি খুঁজছেন তা নিশ্চিত নন তবে এটি জাভাস্ক্রিপ্ট মডেলের মতো নয় যেখানে সহকারী অ্যারেগুলির কোনও স্থির আদেশ নেই।
ফস্কো

6
"অ্যারে_কি" দ্বারা প্রদত্ত সূচকগুলি অরিজিনাল মূল অ্যারের সূচকের সাথে মেলে না। উদাহরণস্বরূপ, আপনি যদি "আনসেট" বা অন্য কয়েকটি ফাংশন ব্যবহার করে অ্যারে পরিবর্তন করে থাকেন তবে মূল অ্যারের সূচীতে ফাঁক থাকবে তবে অ্যারে_কিগুলি একটি নতুন অ্যারে তৈরি করবে।
এসইওএফ

4
এই না কাজ যদি এসসিয়েতিভ আরে মিশ্রিত করা হয়, জন্য array("val1", "val2", "car" => "val3")এটা উত্পাদন করা হবে 0, যা ভুল ...
Xriuk


35
$blue_keys = array_search("blue", array_keys($a));

http://php.net/manual/en/function.array-keys.php


8
এই ফাংশনটি অনুসন্ধান করার জন্য আমি +1 মুহূর্তে গুগল অনুসন্ধানের 5 টি মুহুর্তটি সংরক্ষণ করেছিলাম যা আমি এই মন্তব্যটি টাইপ করার জন্য ব্যবহার করেছি।
আদিত্য এমপি

2

  $a = array(
      'blue' => 'nice',
      'car' => 'fast',
      'number' => 'none'
  );  
var_dump(array_search('car', array_keys($a)));
var_dump(array_search('blue', array_keys($a)));
var_dump(array_search('number', array_keys($a)));



2

যদিও ফস্কোর উত্তরটি ভুল নয় তবে এইটির সাথে বিবেচনা করার মতো একটি মামলা রয়েছে : মিশ্র অ্যারেগুলি। কল্পনা করুন আমার এর মতো অ্যারে রয়েছে:

$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)));

1
কোনও ভেরিয়েবল পাস করার সময়, আপনার এটিকে স্ট্রিং হিসাবেও ফেলে দেওয়া উচিত, কারণ কোনও এসোসিয়েটিভ অ্যারেতে শূন্যের পাশ করা একই নেতিবাচক প্রভাব ফেলবে। উদাহরণস্বরূপ: var_dump(array_search(0, array_map("strval", array_keys($a))));সর্বদা int (0)পরিবর্তে আউটপুট হবে bool (false)
শান ককরিল

পছন্দ করুন আমার উত্তর আপডেট করেছেন, এটি নির্দেশ করার জন্য ধন্যবাদ!
Xriuk

0

আমি একটি সমাধান নিয়ে এসেছি ... ফস্কোর সমাধানের তুলনায় সম্ভবত বেশ দক্ষ

 protected function getFirstPosition(array$array, $content, $key = true) {

  $index = 0;
  if ($key) {
   foreach ($array as $key => $value) {
    if ($key == $content) {
     return $index;
    }
    $index++;
   }
  } else {
   foreach ($array as $key => $value) {
    if ($value == $content) {
     return $index;
    }
    $index++;
   }
  }
 }

2
হ্যাঁ, পিএইচপি একটি কারণে হাজার হাজার বিল্টিন ফাংশন রয়েছে। এগুলি হল সাধারণত অনেক দ্রুত সমতুল্য পিএইচপি কোডে দীর্ঘ পথ খুঁজে লিখিত যুক্তিবিজ্ঞান চেয়ে।
বিল কারভিন

3
এটি সম্ভবত এর চেয়ে দ্রুততর array_search, যা প্রথমে একটি সাজান এবং তাই এটি বেদনাদায়ক ধীরে ধীরে।
আলাসদায়ের

আহ, তবে কোডটি অন্তর্নির্মিত পূর্বনির্ধারিত এবং অনুসন্ধানটি সম্ভবত বাইনারি অনুসন্ধান হবে (ধরে নিলে এটি প্রথমে আইটেমগুলি সাজায়)।
এসইওএফ

0

অ্যারে_কিগুলি ভিত্তিক সমস্ত সমাধান মিশ্র অ্যারেগুলির জন্য কাজ করে না। সমাধান সহজ:

echo array_search($needle,array_keys($haystack), true);

পিএইচপি.না. থেকে: যদি তৃতীয় প্যারামিটারটি কঠোরভাবে সেট করা থাকে তবে অ্যারে_সার্চ () ফাংশন খড়ের খণ্ডে অভিন্ন উপাদানগুলির জন্য অনুসন্ধান করবে। এর অর্থ এটি খড়ের খাঁজে সূঁচের একটি কঠোর প্রকারের তুলনাও সম্পাদন করবে এবং অবজেক্টগুলি একই উদাহরণ হতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.