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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1076閲覧

form(radio)で検索した該当の配列の中の値を全て表示したい

MeB

総合スコア104

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/08/02 02:41

前提・実現したいこと

form(radio)で検索した該当の配列の中の値を全て表示したいです。
ajaxを使用しています。

発生している問題・エラーメッセージ

いくつかあります。すみません。
・下記の配列(多次元配列)では値が返ってこない。($data = ["color"=>"red","type"=>"a"];であれば帰ってくる)
・colorのredがヒットした場合「["color"=>"red","type"=>"a"]」全てを返したいが「[color] => 2年契約」のみ返ってきてしまう。

該当のソースコード

html

1<form id="form" name="search" action="" method="POST"> 2 <input type="radio" id="color01" name="color" value="red"><label for="color01"></label> 3 <input type="radio" id="color02" name="color" value="blue"><label for="color02"></label> 4 <button class="submit" value="検索">検索</button> 5</form> 6<section class="result"></section>

js

1$('.result').html('aaa'); 2 3 $('button').on('click',function(event) { 4 event.preventDefault(); 5 var html = ''; 6 var formdata = new FormData($('#form').get(0)); 7 $.ajax({ 8 "url": 'ajax.php', 9 "type": "POST", 10 "dataType": "html", 11 "data":formdata, 12 "cache":false, 13 "processData": false, 14 "contentType": false, 15 }).done(function(data){ 16 console.log(data); 17 $('.result').html(data); 18 }); 19 });

php

1//ajax.php 2<?php 3$data = [ 4 "test"=>[ 5 [ 6 "color"=>"red", 7 "type"=>"a" 8 ], 9 [ 10 "color"=>"red", 11 "type"=>"b" 12 ], 13 [ 14 "color"=>"blue", 15 "type"=>"c" 16 ] 17 ] 18]; 19 20function filter($value) { 21 $color = filter_input( INPUT_POST, "color" ); 22 return $value === $color; 23} 24$result = array_filter($data1, "filter"); 25?>

発生している問題・エラーメッセージ に記述した2点のご教示をお願いします。
ちょっとわかりにくいかもしれないのでその際はお手数ですがコメントをお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

  • ajax.php

PHP

1$color=filter_input(INPUT_POST,"color"); 2$data = [ 3 "test"=>[ 4 [ 5 "color"=>"red", 6 "type"=>"a", 7 ], 8 [ 9 "color"=>"red", 10 "type"=>"b", 11 ], 12 [ 13 "color"=>"blue", 14 "type"=>"c", 15 ], 16 ], 17]; 18 19$result = array_filter($data["test"],function($x) use($color) { 20 return $x["color"] === $color; 21}); 22print_r($result);

追加分

  • 元.htm

javascript

1<script> 2$(function(){ 3 $('.result').html('aaa'); 4 $('button').on('click',function(event) { 5 event.preventDefault(); 6 var html = ''; 7 var formdata = new FormData($('#form').get(0)); 8 $.ajax({ 9 "url": 'ajax.php', 10 "type": "POST", 11 "dataType": "html", 12 "data":formdata, 13 "cache":false, 14 "processData": false, 15 "contentType": false, 16 }).done(function(data){ 17 console.log(data); 18 $('.result').html(data); 19 }); 20 }); 21}); 22</script> 23<form id="form" name="search" action="" method="POST"> 24color: 25<label><input type="radio" name="color" value="red" checked></label> 26<label><input type="radio" name="color" value="blue"></label><br> 27type: 28<label><input type="radio" name="type" value="a" checked>a</label> 29<label><input type="radio" name="type" value="b">b</label> 30<label><input type="radio" name="type" value="c">c</label><br> 31<button class="submit" value="検索">検索</button> 32</form> 33<section class="result"></section>
  • ajax.php

PHP

1$color=filter_input(INPUT_POST,"color"); 2$type=filter_input(INPUT_POST,"type"); 3$data = [ 4 "test"=>[ 5 [ 6 "color"=>"red", 7 "type"=>"a", 8 ], 9 [ 10 "color"=>"red", 11 "type"=>"b", 12 ], 13 [ 14 "color"=>"blue", 15 "type"=>"c", 16 ], 17 ], 18]; 19 20$result = array_filter($data["test"],function($x) use($color,$type) { 21 return $x["color"]==$color and $x["type"]==$type; 22}); 23print_r($result); 24?>

さらに追記

何も選択されていなければ全て表示。
そこから選択されたものを以外を削っていくような形

  • 元.htm

HTML

1<script> 2$(function(){ 3 $('.result').html('aaa'); 4 $('button').on('click',function(event) { 5 event.preventDefault(); 6 var html = ''; 7 var formdata = new FormData($('#form').get(0)); 8 $.ajax({ 9 "url": 'ajax.php', 10 "type": "POST", 11 "dataType": "html", 12 "data":formdata, 13 "cache":false, 14 "processData": false, 15 "contentType": false, 16 }).done(function(data){ 17 console.log(data); 18 $('.result').html(data); 19 }); 20 }); 21}); 22</script> 23<form id="form" name="search" action="" method="POST"> 24color: 25<label><input type="radio" name="color" value="red">赤</label> 26<label><input type="radio" name="color" value="blue">青</label><br> 27type: 28<label><input type="radio" name="type" value="a">a</label> 29<label><input type="radio" name="type" value="b">b</label> 30<label><input type="radio" name="type" value="c">c</label><br> 31<button class="submit" value="検索">検索</button> 32<input type="reset" value="リセット"> 33</form> 34<section class="result"></section>
  • ajax.php

少しパターンを増やしました

PHP

1$color=filter_input(INPUT_POST,"color"); 2$type=filter_input(INPUT_POST,"type"); 3$data = [ 4 "test"=>[ 5 [ 6 "color"=>"red", 7 "type"=>"a", 8 ], 9 [ 10 "color"=>"red", 11 "type"=>"b", 12 ], 13 [ 14 "color"=>"blue", 15 "type"=>"a", 16 ], 17 [ 18 "color"=>"blue", 19 "type"=>"c", 20 ], 21 [ 22 "color"=>"yellow", 23 "type"=>"a", 24 ], 25 ], 26]; 27 28$result = array_filter($data["test"],function($x) use($color,$type) { 29 return (is_null($color) or $x["color"]==$color) and (is_null($type) or $x["type"]==$type); 30}); 31print_r($result);

$colorと$typeはand検索($colorも$typeも両方ヒットするもの)にしてあります

投稿2018/08/02 03:00

編集2018/08/02 09:04
yambejp

総合スコア114572

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

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

MeB

2018/08/02 03:07

本当にいつも有難うございます。 また、追加の質問になってしまうのですが、 formからのvalueがcolor以外にもたくさんある場合は array_filterの中のuseとreturnの記述を増やす形になるのでしょうか?
MeB

2018/08/02 03:27

追加の回答ありがとうございます。
yambejp

2018/08/02 03:27

「必ずcolorとtypeが選ばれている」という条件が必要 そうでない場合は判定が煩雑になります またcolorとtypeはand(両方一致)なのかor(どちらか一致)なのかでも 調整が必要になりそうです
MeB

2018/08/02 03:32

>「必ずcolorとtypeが選ばれている」という条件が必要 こちらのことを考慮してませんでした…。 $typeや$typeがからの場合はエラーが返ってくる形でしょうか? and or の調整やってみます。
yambejp

2018/08/02 03:34

選ばなかったときは$colorや$typeがnullになるので、 nullと比較して合致するものはないので単純に戻り値がないだけです
MeB

2018/08/02 03:40

ありがとうございます。 調整してみます。
MeB

2018/08/02 08:16

解決済みの質問にすみません。 >必ずcolorとtypeが選ばれている」という条件が必要そうでない場合は判定が煩雑になります 今まさにこれに躓いているのですが、 何も選択されていなければ全て表示。をベースにしてそこから選択されたものを以外を削っていくような形にしたいのですが、全く違う記述になってしまうでしょうか?
MeB

2018/08/02 09:38

ほんとにありがとうございます。 is_null()もしらなかったので勉強になりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問