Lanjutkan pernyataan di dalam loop sementara untuk fitur halaman pencarian

Saya tidak mengerti mengapa loop ini tidak berfungsi.

Tujuan perulangan ini hanyalah untuk melewatkan setiap nilai array (dalam contoh ini, 0-2) yang tidak sama dengan istilah pencarian yang diberikan (dalam contoh ini, TN). Jadi outputnya seharusnya

TN

dan tidak seharusnya

IN
TN
OH

Ini kode saya:

<?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 sumber


Jawaban (5)


pindahkan hitungan++ agar selalu bertambah dan optimis:

while($count < count($states)){
  if($states[$count] == $search){
    echo $states[$count]."<br/>";
  }
  $count++;
}
person WEBjuju    schedule 03.11.2016
comment
Tetapi jika saya membuat kenaikan terjadi sebelum keadaan bergema, bukankah itu akan melewatkan nilai pertama yang ditetapkan pada 0? - person Logan Butler; 03.11.2016
comment
bolehkah saya merekomendasikan array_search? $pos = array_search($search, $state); echo $negara bagian[$pos].‹br/›; - person WEBjuju; 03.11.2016
comment
saya pikir saya harus while($count ‹ count($states)){ hapus = jika tidak maka akan memberi Anda kesalahan, tidak terdefinisikan offser - person Md Hasibur Rahaman; 03.11.2016

gunakan array_search

Cari array untuk nilai "TN" dan kembalikan kuncinya

    <?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
Bisakah itu digunakan seperti... if(!array_search($search, $states)){continue;} di dalam loop while saya? - person Logan Butler; 03.11.2016
comment
tidak, dengan array_search Anda tidak memerlukan loop. Anda tinggal langsung menuju apa yang Anda perlukan dengan cara mencari. $pos = array_search($search, $state); echo $negara bagian[$pos].‹br/›; - person WEBjuju; 03.11.2016
comment
tidak perlu perulangan while - person JYoThI; 03.11.2016

array_search adalah solusi terbaik untuk Anda

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

Saya pikir perulangan foreach akan menjadi solusi yang lebih baik daripada perulangan while. Itu tidak memerlukan titik cointinue atau break dan tidak perlu menghitung untuk melakukan iterasi melalui array.

Perulangan while dalam kasus ini sepertinya tidak berguna.

i.e. :

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

Keluaran:

TN

Namun solusi terbaik tetaplah array_search().

Semoga ini bisa membantu.

person JazZ    schedule 03.11.2016

Anda terjebak dalam lingkaran tanpa batas.

Iterasi ke-1 sementara 0 ‹ 3, jika $states[0] != 'TN' lanjutkan ke iterasi berikutnya $count masih 0

Iterasi ke-2 sementara 0 ‹ 3, jika $states[0] != 'TN' lanjutkan ke iterasi berikutnya $count masih 0

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

Dan itu berlanjut selamanya. Anda terjebak dalam pengecekan terhadap 0 indeks.

Anda harus keluar dari perulangan while menggunakan break setelah Anda menemukan kecocokan daripada menambah jumlah. Juga sebelum menggunakan continue Anda harus menambah variabel $count. Kondisi loop while Anda juga harus < daripada <= karena count mengembalikan 3, dan indeks array $states Anda adalah 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;
}

Dan Anda dapat memeriksa array_search & in_array untuk menemukan elemen dalam array daripada menciptakan kembali roda.

person Mahfuzul Alam    schedule 03.11.2016