

皆様

お世話になります。  
検索数が多くないこともあり、CSVで検索システムを作成しようとしております。

formからデータを取得し、$value_1で都道府県をチェックボックスで選択、$value_2で果物か野菜をラジオボタンで選択し、多次元配列をforeachで検索し、条件に合った配列を吐き出してテーブルを作成しようとしています。

しかしながら、以下の現象がおきています。  
Case 1 :青森県・果物・・で検索⇒２番は出てきても、６番が検索でヒットしない  
Case 2 :埼玉・野菜・・で検索 ⇒検索結果がヒットしない

検索のロジックが誤っているのでしょうか？ご指導をお願いします。

[code]

    [CSVデータ]
    1,千葉県,果物,みかん
    2,青森県,果物,りんご
    3,埼玉県,野菜,トマト
    4,千葉県,野菜,ブロッコリー
    5,埼玉県,野菜,ほうれんそう
    6,青森県,果物,パイナップル
    7,埼玉県,果物,桃
    
[/code]

【PHPコード】

[code]

    echo '<table border="1"><tr><th>#2</th><th>都道府県</th><th>種別</th><th>名前</th></tr>';
    
    $value_1[0] = "青森県";
    $value_1[1] = "埼玉県";
    $value_2 =  "果物";
    
    echo $value_1[0];
    
    foreach($newarray as $v){ 
        if($v[2]== $value_2){
                    if(preg_grep("/".$v[1]."/",$value_1)){ 
                    echo "<tr>\n";
                    echo "<td align='center'>".$v[0]."</td>\n";
                    echo "<td>".$v[1]."</td>\n"; 
                    echo "<td>".$v[2]."</td>\n"; 
                    echo "<td>".$v[3]."</td>\n"; 
                    echo "</tr>\n";
                    $n = $n+1;
                    }
              }else{        
            echo '<br>　条件を入力して検索を押してください。';
            break;
        }
    
    }
    
    echo "</table>";
    
[/code]


CC BY-SA 4.0
2020-01-22T09:00:52.143
62457
2022-08-25T13:01:15.123
31870
question
php array
多次元配列の複数条件による検索


[コメント](https://ja.stackoverflow.com/questions/62457/%e5%a4%9a%e6%ac%a1%e5%85%83%e9%85%8d%e5%88%97%e3%81%ae%e8%a4%87%e6%95%b0%e6%9d%a1%e4%bb%b6%e3%81%ab%e3%82%88%e3%82%8b%e6%a4%9c%e7%b4%a2#comment68325_62457)を[回答として転記](https://ja.meta.stackoverflow.com/q/2645/9820)いたします。

> `if($v[2]== $value_2){ ... } else { ...; break; }`となっていますので、`果物`以外の行で for
> loop が終了してしまいます。つまり、CSV データの`3,埼玉県,野菜,トマト`の行で検索が終了することになります。

下記のように`else`以下のコードを`break`以外に書き換えてみてください。

[code]

    <?php
    echo '<table border="1"><tr><th>#2</th><th>都道府県</th><th>種別</th><th>名前</th></tr>';
    $value_1[0] = "青森県";
    $value_1[1] = "埼玉県";
    $value_2 =  "果物";
    $newarray = array(
      array(1, "千葉県", "果物", "みかん"),
      array(2, "青森県", "果物", "りんご"),
      array(3, "埼玉県", "野菜", "りんご"),
      array(4, "千葉県", "野菜", "ブロッコリー"),
      array(5, "埼玉県", "野菜", "ほうれんそう"),
      array(6, "青森県", "果物", "パイナップル"),
      array(7, "埼玉県", "果物", "桃")
    );
    echo $value_1[0];
    $n = 0;
    foreach($newarray as $v){ 
        if($v[2]== $value_2){
            if(preg_grep("/".$v[1]."/",$value_1)){ 
                echo "<tr>\n";
                echo "<td align='center'>".$v[0]."</td>\n";
                echo "<td>".$v[1]."</td>\n"; 
                echo "<td>".$v[2]."</td>\n"; 
                echo "<td>".$v[3]."</td>\n"; 
                echo "</tr>\n";
                $n = $n+1;
            }
        }else{        
            echo '<br>　条件を入力して検索を押してください。';
            //何らかの処理
            continue;
        }
    }
    echo "</table>";
    ?>
    
[/code]


CC BY-SA 4.0
2020-02-22T06:23:13.853
63259
2020-02-22T06:23:13.853
9820
62457
answer