###前提・実現したいこと
PHPの勉強で、楽天APIを引っ張って、最安値ランキングを作っています。
商品ごとのランキングはできたんですが、
次に作りたいのが、2つ商品のランキングを比較し、
両者で重複するショップを取得し、
2つの商品の金額を足して、安い順に並び直したいと思っています。
例:「2種類の猫のフードを、両方売っているショップで、なおかつ最安値で買いたい」
※下記のソースコードには、楽天APIのapplicationIdが入っていないので、
そのままでは動かないことをご了承下さい。
###2つの商品を選択するHTMLソースコード
HTML
1<form action="kotae.php" name="form1" method="post"> 2 <select name="food1"> 3 <option value="センシブル,4kg">センシブル 4kg</option> 4 <option value="センシブル,2kg">センシブル 2kg</option> 5 </select> 6 7 <select name="food2"> 8 <option value="メールケア,4kg">メールケア 4kg</option> 9 <option value="メールケア,2kg">メールケア 2kg</option> 10 </select> 11 12 <input type="submit" value="計算する"></p> 13</form>
###ボタンを押した先「kotae.php」のソースコード
PHP
1<?php 2$food1 = $_POST['food1']; //1つ目のselectのoptionのvalue 3$food2 = $_POST['food2']; //2つ目のselectのoptionのvalue 4 5//カンマで分けて配列にする 6$food1 = explode(',',$food1); 7$food2 = explode(',',$food2); 8 9//NGキーワード(他のグラム数の商品が混ざらないように) 10if( $food1[1] == '4kg' ){ 11 $NGkeyword = '0.2kg 0.4kg 400g 2kg'; 12} elseif( $food1[1] == '2kg' ){ 13 $NGkeyword = '0.2kg 0.4kg 400g 4kg'; 14} elseif( $food1[1] == '400g' ){ 15 $NGkeyword = '0.2kg 2kg 4kg'; 16}elseif( $food1[1] == '200g' ){ 17 $NGkeyword = '400g 0.4kg 2kg 4kg'; 18} 19 20//エンコード 21$NGkeyword = mb_convert_encoding($NGkeyword,'UTF-8','auto'); 22$NGkeyword = urlencode($NGkeyword); 23 24 //1個目の商品エンコード 25$food1_en1 = mb_convert_encoding($food1[0],'UTF-8','auto'); 26$food1_en2 = mb_convert_encoding($food1[1],'UTF-8','auto'); 27$food1_en1 = urlencode($food1_en1); 28$food1_en2 = urlencode($food1_en2); 29 30 //2個目の商品エンコード 31$food2_en1 = mb_convert_encoding($food2[0],'UTF-8','auto'); 32$food2_en2 = mb_convert_encoding($food2[1],'UTF-8','auto'); 33$food2_en1 = urlencode($food2_en1); 34$food2_en2 = urlencode($food2_en2); 35 36 37 38//1個目の商品のAPIのURL作る(キーワードとNGワードを入れる) 39$url1 = 'https://app.rakuten.co.jp/services/api/IchibaItem/Search/20140222?format=xml&keyword='.$food1_en1.'%20'.$food1_en2.'&NGKeyword='.$NGkeyword.'&genreId=112115&sort=%2BitemPrice&availability=1&applicationId=*****'; 40 41$xml1 = simplexml_load_string(file_get_contents("$url1")); 42 43 44//2個目の商品のAPIのURL作る(キーワードとNGワードを入れる) 45$url1 = 'https://app.rakuten.co.jp/services/api/IchibaItem/Search/20140222?format=xml&keyword='.$food2_en1.'%20'.$food2_en2.'&NGKeyword='.$NGkeyword.'&genreId=112115&sort=%2BitemPrice&availability=1&applicationId=*****'; 46 47$xml2 = simplexml_load_string(file_get_contents("$url2")); 48 49//1個目の商品をforeachでまわす 50foreach((object) $xml1->Items->Item as $item){ 51 52 $name = $item -> itemName;//商品名 53 54 if (strpos($name, $food1[0]) !== FALSE){ 55 56 //繰り返し回数による判定 57 if ( $i >= 10){ 58 break; //10に達したら終了 59 } else { 60 $i++; //繰り返された回数を1つずつカウント 61 $catchcopy = $item -> catchcopy;//キャッチコピー 62 $itemurl = $item -> affiliateUrl;//リンクURL 63 $imageUrl = $item -> mediumImageUrls -> imageUrl;//画像 64 $imageUrl_min = $item -> smallImageUrls -> imageUrl;//小さい画像 65 $shopName = $item -> shopName;//ショップネーム 66 $itemPrice =$item -> itemPrice; 67 $itemPrice = number_format(intval($itemPrice));//金額 68 $shopUrl = $item -> shopUrl;//ショップURL 69 70 //比較するために配列に入れなおそうとしましたが、このままだと上書きされるだけ… 71 $array_food1 = array($shopName,$catchcopy,$itemurl,$imageUrl,$imageUrl_min,$itemPrice,$itemPrice,shopUrl,$itemPrice); 72 } 73 } 74} 75 76//2個目の商品をforeachでまわす 77foreach((object) $xml2->Items->Item as $item){ 78 79 $name = $item -> itemName;//商品名 80 81 if (strpos($name, $food2[0]) !== FALSE){ 82 83 //繰り返し回数による判定 84 if ( $i >= 10){ 85 break; //10に達したら終了 86 } else { 87 $i++; //繰り返された回数を1つずつカウント 88 $catchcopy = $item -> catchcopy;//キャッチコピー 89 $itemurl = $item -> affiliateUrl;//リンクURL 90 $imageUrl = $item -> mediumImageUrls -> imageUrl;//画像 91 $imageUrl_min = $item -> smallImageUrls -> imageUrl;//小さい画像 92 $shopName = $item -> shopName;//ショップネーム 93 $itemPrice =$item -> itemPrice; 94 $itemPrice = number_format(intval($itemPrice));//金額 95 $shopUrl = $item -> shopUrl;//ショップURL 96 97 98 //比較するために配列に入れなおそうとしましたが、このままだと上書きされるだけ… 99 $array_food2 = array($shopName,$catchcopy,$itemurl,$imageUrl,$imageUrl_min,$itemPrice,$itemPrice,shopUrl,$itemPrice); 100 } 101 } 102} 103 104//配列比較 105//var_dump($array_food2); 106//var_dump( array_intersect_assoc($array_food1, $array_food2) ); 107
そもそも、配列の中身を比較して、同じショップのものを取り出す、
というのが出来るのかどうかも分からない状態で進めてきています。
でも、この機能は欲しいな〜と思っている次第です!
情報不足、言葉足らずでしたら、追記致しますので、
どうぞよろしくお願いいたします!
###補足情報(言語/FW/ツール等のバージョンなど)
PHP:5.4.10
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/24 10:42
2016/08/24 23:55