ফোরচ ইনডেক্স কীভাবে সন্ধান করবেন?


489

foreachসূচি খুঁজে পাওয়া সম্ভব ?

নীচে একটি forলুপে:

for ($i = 0; $i < 10; ++$i) {
   echo $i . ' ';
}

$i আপনাকে সূচি দেবে

আমার কি forলুপটি ব্যবহার করতে হবে বা লুপটিতে সূচি পাওয়ার কোনও উপায় আছে foreach?

উত্তর:


908
foreach($array as $key=>$value) {
    // do stuff
}

$keyপ্রতিটি $arrayউপাদান সূচক


2
ওপি সূচক দ্বারা কী বোঝায় তার উপর নির্ভর করে: <? = a = অ্যারে (3,5, 'xx', 4312, 'সাসাস'); সেট না ($ একটি [3]); foreach ($ a as $ k => $ v) মুদ্রণ "\ $ কে = $ কে এবং \ $ v = print v"; ?>
মাইলেন এ রাদেব

9
অবশ্যই, এই প্রশ্নটি খুব সুনির্দিষ্ট নয়, আমি এটি বোঝাতে চেয়েছিলাম যে ওপি মূলত $ কী => ax মান বাক্য গঠন সম্পর্কে অজ্ঞাত ছিল
ওভেন

38
ভাল এটি আসলে সঠিক, তবে গ্রহণযোগ্য উত্তর হওয়া উচিত নয়, যেহেতু কীটিও একটি স্ট্রিং হতে পারে। বলুন আপনি $myarr['foo'] = 'bar';এই পদ্ধতিটি ব্যর্থ হন
তোসকান

12
@ বাইসন আপনি ঠিক এই অর্থে রয়েছেন যে এটি ব্যর্থ হয় না। তবে এটি ওপি প্রশ্ন মেনে চলতে ব্যর্থ। তিনি এন-থ এলিমেন্টের মতো সংখ্যাসূচক মানগুলি সন্ধান করছেন।
তোসকান

3
@ টসকান যেমন বলেছেন, এটি গ্রহণযোগ্য উত্তর হওয়া উচিত নয়। আমি মনে করি কেবল লুপের বাইরে একটি ভেরিয়েবল তৈরি করা এবং সেখান থেকে গণনা করা, vatiable++;প্রতিটি পুনরাবৃত্তির সাথে এটি বাড়িয়ে নেওয়া ভাল । গতানুগতিক উপায়, কিন্তু সর্বদা কাজ করেছে।
জোমার সেভিলজো

172

আপনি নিজের মধ্যে একটি হ্যাক রাখতে পারেন foreach, যেমন প্রতিটি রান-থ্রোতে বাড়ানো ক্ষেত্র, যা forলুপটি আপনাকে সংখ্যাসূচক-সূচক অ্যারেতে দেয় ঠিক তেমন । এই জাতীয় ক্ষেত্রটি সিউডো-সূচক হবে যা ম্যানুয়াল পরিচালনা (ইনক্রিমেন্টস ইত্যাদি) প্রয়োজন।

foreachআপনাকে আপনার $keyমান আকারে আপনার সূচক দেবে , সুতরাং এই জাতীয় হ্যাকের প্রয়োজন হবে না।

যেমন, এ foreach

$index = 0;
foreach($data as $key=>$val) {
    // Use $key as an index, or...

    // ... manage the index this way..
    echo "Index is $index\n";
    $index++;
}

127
একটি লুপে একটি মান বাড়ানো খুব কমই 'হ্যাক' is
থমাস ম্যাককেবে

17
@ থমাসম্যাককেবে এমনকি কেউ বলতে পারে এটি লুপের অন্যতম প্রধান ব্যবহার।
বাইসন

26

এটি লক্ষ্য করা উচিত যে আপনি key()বর্তমান কীটি চালু করার জন্য যে কোনও অ্যারেতে কল করতে পারেন । আপনি অনুমান current()করতে পারেন যে বর্তমান মানটি ফিরে next()আসবে এবং অ্যারের পয়েন্টারটিকে পরবর্তী উপাদানের দিকে নিয়ে যাবে।


যদি আপনি কোনও আইটেম সংরক্ষণ করার জন্য একটি সরল পুরাতন পিএইচপি এসোসিয়েটিভ অ্যারে ব্যবহার করতে চান যা আইটেবল ইন্টারফেসের মাধ্যমে উন্মুক্ত করা হবে (যেখানে আপনি কোথায় লুপে রয়েছেন তার ট্র্যাক রাখতে হবে)।
পিটার 21

2
বিকল্প, কিন্তু প্রতি পুনরাবৃত্তির একটি ফাংশন কল জন্য +1 একটু preassigned ভেরিয়েবল (অর্থাত ব্যবহার ব্যবহার থেকে ভারী হয় $keyথেকে $key=>$valueযাইহোক, আমি বাজি ধরে বলতে পারি নিম্ন কর্মক্ষমতা অ উল্লেখযোগ্য / একটি সহজ লুপ প্রতক্ষ্য হয়) ...।
আর্মফুট

20

ওউনের একটি ভাল উত্তর আছে। যদি আপনি কেবল কীটি চান এবং আপনি একটি অ্যারের সাথে কাজ করছেন তবে এটি কার্যকরও হতে পারে।

foreach(array_keys($array) as $key) {
//  do stuff
}

4
এবং আপনার যদি সূচকের প্রয়োজন হয় foreach(array_keys($array) as $index=>$key),।
লিও

14

আপনি $iলুপের বাইরে তৈরি করতে এবং লুপের $i++নীচে করতে পারেন ।


16
এটি গুরুত্বপূর্ণ যে এই পদ্ধতিরটি লুপের বর্তমান পুনরাবৃত্তি দেয়, পুনরাবৃত্ত অ্যারের বর্তমান সূচকটি নয় note
পিটার বেইলি

8

এই দুটি লুপ সমতুল্য (অবশ্যই সুরক্ষার রেলিংয়ে বার করুন):

for ($i=0; $i<count($things); $i++) { ... }

foreach ($things as $i=>$thing) { ... }

যেমন

for ($i=0; $i<count($things); $i++) {
    echo "Thing ".$i." is ".$things[$i];
}

foreach ($things as $i=>$thing) {
    echo "Thing ".$i." is ".$thing;
}

17
এটি যদি কোনও সহযোগী অ্যারে হয় না
জো কর্টোপাসি


5

জোনাথন ঠিক আছে। পিএইচপি অ্যারে মানগুলির জন্য মানচিত্রের টেবিল ম্যাপিং কী হিসাবে কাজ করে। আপনার অ্যারে সংজ্ঞায়িত করা থাকলে কিছু ক্ষেত্রে আপনি একটি সূচক পেতে পারেন

$var = array(2,5);

for ($i = 0; $i < count($var); $i++) {
    echo $var[$i]."\n";
}

আপনার আউটপুট হবে

2
5

সেক্ষেত্রে অ্যারের প্রতিটি উপাদানগুলির একটি জ্ঞাত সূচক রয়েছে, তবে আপনি যদি নিম্নলিখিতটির মতো কিছু করেন

$var = array_push($var,10);

for ($i = 0; $i < count($var); $i++) {
    echo $var[$i]."\n";
}

আপনি কোন আউটপুট পাবেন না। এটি ঘটে কারণ পিএইচপি-তে অ্যারেগুলি লিনিয়ার কাঠামো নয় যেমন তারা বেশিরভাগ ভাষায়। এগুলি হ্যাশ টেবিলগুলির মতো যাতে সমস্ত সঞ্চিত মানগুলির কী থাকতে পারে বা নাও থাকতে পারে। অতএব foreach তাদের উপর ক্রল করতে সূচকগুলি ব্যবহার করে না কারণ অ্যারে সংজ্ঞায়িত করা থাকলে তাদের কেবল সূচি থাকে। আপনার যদি একটি সূচি প্রয়োজন হয়, আপনার অ্যারেগুলি ক্রল করার আগে সম্পূর্ণরূপে সংজ্ঞায়িত হয়েছে তা নিশ্চিত করুন এবং লুপের জন্য একটি ব্যবহার করুন।


হ্যাঁ, এই কারণেই পিএইচপি-তে আমাদের অবশ্যই কী দ্বারা "অ্যারে যোগদান" করতে হবে সূচি দ্বারা নয় ... এছাড়াও অ্যারে_ম্যাপ দেখুন ( ফানক , $ এ,। বি)।
পিটার ক্রাউস

ওপস, প্রিয় পাঠক এবং @ ব্রাওয়ানিমন, এও মনে রাখবেন যে আপনার উদাহরণটি অ্যারে_পুষ্প () বাগ (!) এর মতো। পুনঃসংশোধনটি ব্যবহার করতে হবে $var[] = 10;(গাইডের পিএইচপি লিঙ্কটি দেখুন), তাই দ্বিতীয় forলুপটি প্রত্যাশিত ফলাফলকে আউটপুট করে।
পিটার ক্রাউস

4

পিএইচপি অ্যারে অভ্যন্তরীণ পয়েন্টার রয়েছে, তাই এটি চেষ্টা করুন:

foreach($array as $key => $value){
   $index = current($array);
}

আমার পক্ষে ঠিক আছে (কেবলমাত্র প্রাথমিকভাবে পরীক্ষিত)।


1

সহযোগী অ্যারেগুলির সাথে কাজ করার সময় আমি সাধারণত এটি করি:

foreach ($assoc_array as $key => $value) {
 //do something
}

এটি অ-অ্যাসোসিয়েটিভ অ্যারেগুলির সাথেও দুর্দান্ত কাজ করবে। $ কী সূচকের মান হবে। আপনি যদি পছন্দ করেন তবে আপনি এটিও করতে পারেন:

foreach ($array as $indx => $value) {
  //do something
}

4
'বিকল্প' কিসের জন্য? আপনি জানেন ভেরিয়েবলের নাম ছাড়াও এটি কি একই? সুতরাং শেষ বাক্যটি এবং কোড ব্লকটি অপ্রয়োজনীয়, আমি বলব - এটি যদি কিছু করে তবে এটি কেবল বিভ্রান্ত হয় ..
ডেনিস98

@ ডেনিস 8৮ পার্থক্যটি হ'ল তাদের মধ্যে একটির ইনপুট হিসাবে একটি মিশুক অ্যারে থাকে এবং অন্যটির একটিতে সংখ্যাসূচক অ্যারে থাকে। যদিও আমি অনুমান করি উত্তরটি যদি আরও কিছুটা ভারবস হয় তবে ভাল হত।
I_ATE_YOUR_WORK_FILES

0

আমি এটি যুক্ত করতে চাই, আমি এটি কেবলমাত্র আমার টেবিলকে সূচক করতে লারাভেলে ব্যবহার করেছি:

  • সাথে $ লুপ-> সূচক
  • আমি এটি 1+ থেকে শুরু করতে ++ op লুপ দিয়ে প্রিঙ্ক্রেমেন্ট করি

আমার কোড:

@foreach($resultsPerCountry->first()->studies as $result)
  <tr>
    <td>{{ ++$loop->index}}</td>                                    
  </tr>
@endforeach

এই প্রশ্নটি লারাভেলের জন্য জিজ্ঞাসা করা হয়নি। $loopপরিবর্তনশীল ব্যবহৃত কারণ এটি সাধারণ পিএইচপি জন্য জিজ্ঞাসা করা হয় হতে পারে না।
üzgür কারাগেজ

0

আমি এইভাবে সমাধান করেছি, যখন আমাকে পূর্বসূচী সূচক এবং একই প্রসঙ্গে মানটি ব্যবহার করতে হয়েছিল:

$array = array('a', 'b', 'c');
foreach ($array as $letter=>$index) {

  echo $letter; //Here $letter content is the actual index
  echo $array[$letter]; // echoes the array value

}//foreach

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