質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

345閲覧

php 配列から絞込検索をする場合、array_filterを使うのはどうなのでしょうか?また、配列の処理について分かりません。

lenlen

総合スコア44

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/11/30 05:01

下記のように、味を指定して検索して、当てはまる食べ物の名前を表示するというものをつくりたいのですが、配列から検索して表示するという時に

array_filter関数を使ってみようかと思うのですが、パフォーマンス的に、又は実用性的にいかがでしょうか?
そして、array_filterのreturnで演算子($x["sweet"]==1 && $x["sour"]==1 のようなもの)を書かないといけないと思うのですが、
チェックボックスから入力されたものを $tasteに配列として入れて、そのあとどのようにarray_filterで処理すればよいのかがわかりませんでした。。
もっと良い方法がある場合は教えていただけると嬉しいですm(__)m

HTML

1<form action="/search.php" method="post"> 2 3<label><input type="checkbox" name="taste[]" value="sweet">甘い</label> 4<label><input type="checkbox" name="taste[]" value="sour">酸っぱい</label> 5<label><input type="checkbox" name="taste[]" value="bitter">苦い</label> 6 7<input type="submit" value="検索"> 8 9</form>

php

1 2var items = array( 3 { 4 "id": 1, 5 "name": "りんご", 6 "sweet": "1", 7 "sour": "0", 8 "bitter": "0", 9 }, 10 { 11 "id": 2, 12 "name": "みかん", 13 "sweet": "1", 14 "sour": "1", 15 "bitter": "0", 16 }, 17 { 18 "id": 3, 19 "name": "たまねぎ", 20 "sweet": "0", 21 "sour": "0", 22 "bitter": "1", 23 } 24); 25 26$taste = $_POST['taste']; //ここに格納された配列はどのようにarray_filterで処理することができますか? 27 28$b_items = array_filter($items,function($x){ 29 return ( 30 //ここをどうすればいいかわかりません。。 31 ); 32}); 33 34<?php foreach ($b_items as $item) : ?> 35 36<?php echo $item['name']; ?> 37 38<?php endforeach; ?> 39 40

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

パフォーマンス、実用性で考えると、DB にデータを入れるのが良いと思います。

投稿2017/11/30 12:04

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

こんな感じですか?

PHP

1<form method="post"> 2 3<label><input type="checkbox" name="taste[]" value="sweet">甘い</label> 4<label><input type="checkbox" name="taste[]" value="sour">酸っぱい</label> 5<label><input type="checkbox" name="taste[]" value="bitter">苦い</label> 6 7<input type="submit" value="検索"> 8 9</form> 10<?PHP 11$items =[ 12 ["id"=>1,"name"=>"りんご","sweet"=>"1","sour"=>"0","bitter"=>"0"], 13 ["id"=>2,"name"=>"みかん","sweet"=>"1","sour"=>"1","bitter"=>"0"], 14 ["id"=>3,"name"=>"たまねぎ","sweet"=>"0","sour"=>"0","bitter"=>"1"], 15]; 16 17$taste = filter_input(INPUT_POST,'taste',FILTER_DEFAULT,FILTER_REQUIRE_ARRAY); 18if(!is_null($taste)){ 19 $b_items = array_filter($items,function($x) use($taste){ 20 foreach($taste as $val){ 21 //if($x[$val]==="0") return false; 22 /* "0"の時という消極的なmatchではなく"1"でないときに変更 */ 23 if(!isset($x[$val]) or $x[$val]!=="1") return false; 24 }; 25 return true; 26 }); 27 foreach($b_items as $val){ 28 print $val["name"]."<br>"; 29 } 30}; 31

※一部修正しました
これなら、sweetが2だったり、sourが設定されてなかったりなど
特殊な場合もフィルタ可能です

投稿2017/11/30 05:21

編集2017/11/30 05:30
yambejp

総合スコア114583

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lenlen

2017/11/30 05:24

ご回答くださりありがとうございます! すごい。。 ちょっと自分で解析してみます。
yambejp

2017/11/30 05:31

ちょっと修正してあります
lenlen

2017/11/30 05:45

ありがとうございます! これだとユーザーの選択によっての穴がなくなるわけですねm(__)m
lenlen

2017/11/30 05:58

希望通りの動きになりました! また、勉強にもなりました。 ありがとうございましたm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問