前提・実現したいこと
fromからの値を取って来てそれに対応した項目(配列)を表示させたいのですが、
formの1つの値を value="1,2" のような感じにして複数個取得してヒットしたものを表示させたいです。
現状はvalueが1つであれば動く状態です。valueの中が2つ以上(value="1,2,3")の場合は動かないです。
訂正
現状はvalueが1つであれば正常に検索され該当の配列のみが表示されます。
valueの中が2つ以上(value="1,2,3")の場合は下記のphpに記述しましたが"チェックされてない"が表示されます。
該当のソースコード
html
1<form id="form" name="search" action="" method="POST"> 2 <div class="form-list"> 3 <p>タイプ</p> 4 <input type="radio" id="type01" name="type" value="1"><label for="type01">1</label> 5 <input type="radio" id="type02" name="type" value="2,3,4"><label for="type02">2以降</label> 6 </div> 7 <div class="form-list"> 8 <p>カラー</p> 9 <input type="radio" id="color01" name="color" value="red"><label for="color01">赤</label> 10 <input type="radio" id="color02" name="color" value="blue,green"><label for="color02">青または緑</label> 11 </div> 12 <button class="submit" value="check">検索</button> 13 </form>
js
1//ajaxの処理が2回あるのは検索ボタンを押す前に全項目を表示させておきたいからなのですが、 2//1回で済む記述があればご教示していただきたいです。ついでの質問ですみません。 3$(function () { 4 $.ajax({ 5 url: 'ajax.php', 6 type: "POST", 7 dataType: "html", 8 }).done(function(data){ 9 $('.result').html(data); 10 }); 11 12 $('button').on('click',function(event) { 13 event.preventDefault(); 14 var html = ''; 15 var formdata = new FormData($('#form').get(0)); 16 $.ajax({ 17 url: 'ajax.php', 18 type: "POST", 19 dataType: "html", 20 data:formdata, 21 cache:false, 22 processData: false, 23 contentType: false, 24 }).done(function(data){ 25 $('.result').html(data); 26 }); 27 }); 28});
php
1<?php 2header("Content-type: text/html; charset=utf-8"); 3$type = filter_input( INPUT_POST, "type" ); 4$type_split = preg_split("/,/", $type); //,で区切って取って見ましたが動きませんでした。追記:配列にカンマ区切りでそれぞれのあたいは入るのですが、正常の検索されまでんでした。 5 //下記のif文のところですと"チェックされてない"が表示されます。 6$type_implode = implode($type_split);//区切ったもの文字列にしたのですが"12"となってしまいうまく行きませんでした。追記:結果が"12"となってしまうため同じく"チェックされてない"が表示されます。 7 8$data = [ 9 "test"=>[ 10 [ 11 "type"=>"1", 12 "color"=>"red" 13 ], 14 [ 15 "type"=>"2" 16 "color"=>"red" 17 ], 18 [ 19 "type"=>"3" 20 "color"=>"blue" 21 ], 22 [ 23 "type"=>"4" 24 "color"=>"green" 25 ] 26 ] 27]; 28 29$result = array_filter($data["test"],function($x) use($type) { 30 return (is_null($type) || $x["type"] == $type); 31}); 32if ($result == null) { 33 print <<<eof 34 <div class="empty"> 35 <p>チェックされてない</p> 36 </div> 37eof; 38} else { 39 array_walk($result,function($x){ 40 print <<<eof 41 <p>{$x["type"]}</p> 42eof; 43}); 44} 45?>
試したこと
上記のコメントアウト部分のようにいろいろ試して見たのですが、
そもそも $type がどのような形であれば
複数のtypeがヒットするのでしょうか?
ご教示のほどよろしくお願いします。
追記
質問の趣旨が少し変わってしまうので指摘がありましたら別で質問いたします。
papinianusさんのご回答を元に項目がtype以外にも必要だったため
php
1$result = array_filter($data["test"],function($x) use($type,$color) { 2 return (is_null($type) || in_array($x["type"], $type_split, true)) && 3 (is_null($color) || in_array($x["color"], $color_split, true)); 4}); 5としましたが、この状態ですと全ての項目に当てはまっているものした表示されませんでした。 6例:カラー項目の青または緑のみを押した場合typeでいうと3と4を表示したいがcolorがチェックされていないため何も表示されない状態です。 7※htmlとphpの配列にcolorの項目を追記しています。
回答3件
あなたの回答
tips
プレビュー