ดำเนินการต่อคำสั่งภายใน while วนซ้ำสำหรับคุณสมบัติหน้าการค้นหา

ฉันไม่เข้าใจว่าทำไมลูปนี้ถึงไม่ทำงาน

จุดประสงค์ของการวนซ้ำนี้เป็นเพียงการข้ามทุกค่าของอาร์เรย์ (ในตัวอย่างนี้ 0-2) ที่ไม่เท่ากับคำค้นหาที่กำหนด (ในตัวอย่างนี้คือ TN) ดังนั้นผลลัพธ์ควรจะเป็น

TN

และไม่ควรจะเป็น

IN
TN
OH

นี่คือรหัสของฉัน:

<?php

$states = array('IN', 'TN', 'OH');
$search = 'TN';

$count = 0;
while($count <= count($states)){
    if($states[$count] != $search){
        continue;
    }

    echo $states[$count]."<br/>";
    $count++;
}

?>

person Logan Butler    schedule 03.11.2016    source แหล่งที่มา


คำตอบ (5)


เลื่อนการนับ++ เพื่อให้มันเพิ่มขึ้นเสมอและมองโลกในแง่ดี:

while($count < count($states)){
  if($states[$count] == $search){
    echo $states[$count]."<br/>";
  }
  $count++;
}
person WEBjuju    schedule 03.11.2016
comment
แต่ถ้าฉันทำให้การเพิ่มขึ้นเกิดขึ้นก่อนการสะท้อนของสถานะนั้นจะไม่ข้ามค่าแรกที่ตั้งไว้ที่ 0 ใช่ไหม - person Logan Butler; 03.11.2016
comment
ฉันขอแนะนำ array_search ได้ไหม $pos = array_search($ค้นหา, $states); echo $states[$pos].‹br/>; - person WEBjuju; 03.11.2016
comment
ฉันคิดว่าฉันควรจะเป็น while($count ‹ count($states)){ Remove = ไม่เช่นนั้นมันจะทำให้คุณมีข้อผิดพลาด ยกเลิกการกำหนด offser - person Md Hasibur Rahaman; 03.11.2016

ใช้ array_search

ค้นหาค่า "TN" ในอาร์เรย์แล้วส่งคืนคีย์

    <?php

       $states = array('IN', 'TN', 'OH'); 
       $search = 'TN'; 

        $index = array_search($search, $states); 

        if($index && $states[$index])
        {

         echo $states[$index];

        }

     ?>
person JYoThI    schedule 03.11.2016
comment
มันสามารถนำมาใช้แบบ... if(!array_search($search, $states)){continue;} ภายใน while loop ของฉันได้ไหม? - person Logan Butler; 03.11.2016
comment
ไม่ ด้วย array_search คุณไม่จำเป็นต้องมีการวนซ้ำ คุณเพียงแค่ไปที่สิ่งที่คุณต้องการโดยตรงโดยการค้นหา $pos = array_search($ค้นหา, $states); echo $states[$pos].‹br/>; - person WEBjuju; 03.11.2016
comment
ไม่จำเป็นต้อง while วนซ้ำ - person JYoThI; 03.11.2016

array_search เป็นทางออกที่ดีที่สุดสำหรับคุณ

<?php
$states = array('IN', 'TN', 'OH');
$search = 'TN';
$searcharr = array_search($search, $states); 
var_dump($searcharr);
person Rajesh Patel    schedule 03.11.2016

ฉันคิดว่า foreach loop จะเป็นทางออกที่ดีกว่า while loop ไม่จำเป็นต้องมีจุด cointinue หรือ break และไม่จำเป็นต้องนับเพื่อวนซ้ำผ่านอาร์เรย์

การวนซ้ำ while ในกรณีนี้ดูเหมือนไร้ประโยชน์

i.e. :

foreach ($states as $state) {
    if ($state == $search) {
        echo $state."<br />";
    }
}

เอาท์พุต :

TN

แต่ทางออกที่ดีที่สุดคือ array_search()

หวังว่ามันจะช่วยได้

person JazZ    schedule 03.11.2016

คุณติดอยู่ในวงวนที่ไม่มีที่สิ้นสุด

การวนซ้ำครั้งที่ 1 ในขณะที่ 0 ‹ 3 ถ้า $states[0] != 'TN' ดำเนินการวนซ้ำครั้งถัดไป $count ยังคงเป็น 0

การวนซ้ำครั้งที่ 2 ขณะที่ 0 ‹ 3 ถ้า $states[0] != 'TN' ดำเนินการวนซ้ำครั้งถัดไป $count ยังคงเป็น 0

....... ....... .......

และมันจะดำเนินต่อไปตลอดไป คุณติดอยู่กับตัวเองในการตรวจสอบกับดัชนี 0

คุณควรออกจากลูป while โดยใช้ตัวแบ่งเมื่อคุณพบคู่ที่ตรงกันแล้วจึงค่อยนับเพิ่มขึ้น นอกจากนี้ก่อนที่จะใช้ continue คุณควรเพิ่มตัวแปร $count นอกจากนี้เงื่อนไขการวนซ้ำ while ของคุณควรเป็น < แทนที่จะเป็น <= เพราะ count ส่งคืน 3 และดัชนีอาร์เรย์ $states ของคุณคือ 0,1,2

$states = array('IN', 'TN', 'OH');
$search = 'TN';

$count = 0;
while($count < count($states)){
    if($states[$count] != $search){
        $count++;
        continue;
    }

    echo $states[$count]."<br/>";
    break;
}

และคุณสามารถตรวจสอบ array_search & in_array เพื่อค้นหาองค์ประกอบในอาร์เรย์แทนที่จะประดิษฐ์วงล้อขึ้นมาใหม่

person Mahfuzul Alam    schedule 03.11.2016