PHPとJSONについて

このQ&Aのポイント
  • PHPでJSONのAPIを使おうとしていますが、キーの指定がうまくできません。
  • 指定したキーでJSONデータを取得できない問題について質問です。
  • JSONとPHPの組み合わせでキーの指定方法がわかりません。
回答を見る
  • ベストアンサー

【続】PHPとJSONについて

前回の質問で http://oshiete1.goo.ne.jp/qa4754599.html Web ad Fortune ​http://jugemkey.jp/api/waf/api_free.php​ という占いのAPIをPHPにて使おうと思い、、、 $date = '2009/02/27'; print_r( $obj->horoscope->$date ); とすればいいことがわかったのですが、 $date = '2009/02/27'; print_r( $obj->horoscope->$date[0]); と指定しても取得できませんでした。 どのようにキーを指定するのかわかりません。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.1

それだと $obj の horoscope の $date[0] になるので 1行で書きたいなら print_r( $obj->horoscope->{$date}[0] ); keyに{}を使うと動かないバージョンがあったと思うので ちゃんと書くなら $uranai = $obj->horoscope->$date; print_r( $uranai[0] );

rentarumoto
質問者

お礼

本当に何度もすいません。 バージョンのことまで考えていただき、、、なんとお礼を言えばいいか。。。 助かりました。 ありがとうございました。

関連するQ&A

  • PHPでJSONを扱うときに配列の参照について

    Web ad Fortune http://jugemkey.jp/api/waf/api_free.php という占いのAPIをPHPにて使おうと思い、 JSON形式で情報が帰ってくるようなので JSONについて調べて json_decode()関数を使うことにしました。 しかし、いまいち配列からのデータ参照ができません。どういうことかというと、 牡羊座のランクを取り出したいときに 【ソース】 <?php $json = file_get_contents("http://api.jugemkey.jp/api/horoscope/free/2009/02/27","r"); $obj = json_decode($json); echo "<pre>"; print_r($obj->horoscope->2009/02/27[0]["rank"]); echo "</pre>"; ?> としても何も表示されません。 ちなみに、print_rの部分を print_r($obj->horoscope); とすると http://nanigashi.biz/json.php のように表示されます。 配列からの情報の読み込み(データ参照)がわかりません。 教えてください。

    • ベストアンサー
    • PHP
  • perlのリファレンス?はPHPではどうするのでしょうか?

    以下、Perlのソースですが、これをPHPに直すとどうなるのでしょうか? use strict; use warnings; use Data::Dumper; my $Name = "テスト"; my $Width = "100"; my $Height = "200"; my $dat = [ $Name, { Width=>$Width, Height=>$Height, } ]; print Dumper($dat); sub test{ my ($aryref) = @_; $$aryref[0]{$Name}{"Width"} = $Width; $$aryref[0]{$Name}{"Height"} = $Height; } my @OBJ = (); test(\@OBJ); print Dumper(@OBJ);

    • 締切済み
    • PHP
  • PHPの参照渡しについて

    以下のようなコードがあったとき $obj = new stdClass(); $foo = $obj; この場合、動作は いわゆる【参照の値渡し】というとらえかたでよいのでしょうか? 変数$obj には、 new stdClass();という記述によって 新規に作成されたオブジェクトの参照(※正確には別のメモリ内に保持されたオブジェクトのアドレス) が保持されるわけですよね? そのとき $foo = $obj; というコードは$objが保持するオブジェクトのアドレス値を$fooという変数にも コピーするという動作を意味するわけですよね。 この場合、両変数を用いて生成されたオブジェクトのプロパティなどの状態を 共有することとができます。 しかしながら変数$fooに別の値、例えば文字列を代入すうると $foo = "文字列"; とすると$fooの値が変更され$objの値は変更されません。 対して、次のようなコードがあった場合 $foo = &$obj; というコード、これはPHPにおける参照渡しですが、 この場合は$objが指し示す、オブジェクトが保持されているメモリ上のアドレスではなく そのメモリ上に確保された変数$objそのもののアドレスが$fooという変数にコピー? されるのでしょうか? この明示的な参照渡しだと、オブジェクトの状態を共有するのはもちろん $foo = "オブジェクト破棄"; と片方に文字列を代入すると print $obj; 同様に文字列にかわってしまいます。 この本来の意味?であろう参照渡しとは実際 $fooに変数$objそのもののアドレスが保持されるという 解釈でよいのでしょうか? おくわしいかたご教授ください。

    • ベストアンサー
    • PHP
  • 【続】PHPのsqlでキーワード検索【急】

    前回、前々回の質問で解決しなかったので質問を変えて改めて質問させて下さい。 ※php、データベース共に初心者ですので専門用語での指摘には対応出来ませんので宜しくお願いします。 前々回http://oshiete1.goo.ne.jp/qa3220932.html 前回http://oshiete1.goo.ne.jp/qa3234825.html データベースからデータを表示するPHP、「list.php」と 検索してlist.phpに渡す「top.php」があります。 現在list.phpに if($fn == "sr"){//サーチ $mainimage="navisearch.jpg"; $table_tmp = ""; $query_tmp = ""; if($munic != 9999){//地域指定があるとき if($munic == 1){//1の時 if($area != 9999){ //1でエリア指定があるとき $table_tmp = ",Town_table"; $query_tmp ="and To_id = St_town and To_area = ".$area; }else{//1でエリア指定が無いとき $query_tmp ="and St_munic = ".$munic; } }else{//1以外の時 $query_tmp ="and St_munic = ".$munic; } } if($lowcat > 0){ $query_tmp .= " and Li_id = ".$lowcat; } if(strlen($key) > 0){ $query_tmp .= " and (St_mainname like ?"%".addslashes($key)."%?" or St_subname like ?"%".addslashes($key)."%?" or St_freeheadtxt like ?"%".addslashes($key)."%?" or St_freetxt like ?"%".addslashes($key)."%?" or St_movietxt like ?"%".addslashes($key)."%?")"; } … というphpがあり、地域検索、エリア検索、キーワード検索が出来るようになっています。 これを地域指定、エリア指定両方無い時も 地域指定1、エリア指定9999とするように出来ないでしょうか? 理想は地域、エリア検索がなくキーワード検索のみにしたいのですが、地域、エリア検索部分のphpを消すとキーワード検索が働かなくなります。 (エラーは出なくなりましたがキーワードを無視し、データベース全てのデータを返して来る状態です) すぐに回答欲しいです。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPを勉強中なのですが一点わからない部分が

    現在PHPを勉強中なのですがちょっと分からない部分がありまして質問します。 例題1は引数を指定してもしなくても実行すればHello Worldと表示されます。 しかし例題2は引数($var)を指定しないとエラーとなります。 この違いはなんでしょうか?私には同じに見えますが・・。 例題1 <?php function somefunc(){ print ( "Hello World" ); }; somefunc(); ?> 例題2 <?php function my_print_r( $var ){ echo "<pre>"; print_r( $var ); / echo "</pre>"; }; $name = array("sophy","nancy","angera"); my_print_r($name); ?>

    • ベストアンサー
    • PHP
  • N88互換BASICで変換したが使えません。その4

    750 LINE INPUT #1,PV$(0) 760 WHILE MID$(PV$,2,1)<>"E" 770 LINE INPUT #1,PV$ 780 KO.J=KO.J+1 :PV$(KO.J)=PV$ 790 WEND 800 CLOSE 810 OPEN FFF$ FOR APPEND AS #1 820 PRINT #1,Q$+FNF3$(PV$(0),5)+Q$+R$; 830 PRINT FNF4$(FNF3$(PV$(0),5)) 840 FOR J=1 TO KO.J 850 IF MID$(PV$(J),1,1)="S" THEN 920 860 PRINT #1,Q$+FNF2$(PV$(J),21,24)+Q$+R$; 870 XY=0 :JJ=J 880 IF J>10 AND J<21 THEN XY=1 :JJ=J-10 890 IF J>20 THEN XY=2 :JJ=J-20 900 LOCATE 3+XY*24,5+JJ 910 PRINT USING "(##)###.####";FNF5!(PV$(J),21);FNF5!(PV$(J),24); 920 NEXT 930 CLOSE 940 LOCATE 0, 2 :PRINT " 950 XX!=FRE(0) 960 RETURN 970 CLOSE :END 980 CLOSE 990 ' これで最後です。 関連URL: http://oshiete1.goo.ne.jp/kotaeru.php3?q=324875 http://oshiete1.goo.ne.jp/kotaeru.php3?q=324879 http://oshiete1.goo.ne.jp/kotaeru.php3?q=324882

  • twitterのStreaming apiについて

    PHPとStreamingのGET userを使って 自分のタイムラインのツイートを取得しようと思ったのですが 一度userstreamに接続すると接続しっぱなしになり 最後にはタイムアウトになって終了してしまします うまく回避する方法はないでしょうか? よろしくお願いします <?php // OAuth用ライブラリ「twitteroauth」 require_once 'twitteroauth/twitteroauth.php'; // アプリ登録した際に発行された値を入れて下さい。 $consumer_key = '****************'; $consumer_secret = '********************'; $access_token = '*************************'; $access_token_secret = '*********************'; // オブジェクト生成 $tw_obj = new TwitterOAuth ( $consumer_key, $consumer_secret, $access_token, $access_token_secret); // REST_API指定(今回はタイムラインのREST_API) $tw_rest_api = 'https://userstream.twitter.com/1.1/user.json'; // メソッド指定 $request_method = 'GET'; // オプション指定 $options = array ( 'delimited' => 1950 ); // ユーザータイムライン取得 $tw_obj_request = $tw_obj->OAuthRequest( $tw_rest_api, $request_method, $options); // json形式で取得 $tw_obj_request_json = json_decode($tw_obj_request, true); // 変数生成 $time_line_texts .= ''; // 表示 print($time_line_texts); ?>

    • 締切済み
    • PHP
  • phpの日本語が□(四角)に文字化けします。

    PHPでテキストファイルの検索結果をソートして出力するスクリプトで文字化けが出て困って います。 テキストファイル------------------ 20101225|第二会議室|1200|1300|就職面接 20101225|第一会議室|1300|1400|打ち合わせ 20101225|第一会議室|1500|1600|テスト 20101225|第一会議室|0900|1000|会議 20101225|第一会議室|1200|1300|休憩 20101224|第一会議室|1200|1500|クリスマス会 スクリプト(抜粋)--------------------- //$_GET["year"]) = 2010; //$_GET["title"]) = "第一会議室"; //$_GET["month"] = 12; //$_GET["day"] = 25; foreach ($schedule_list as $lineno => $line) { list($schedule_date, $title, $str_time, $end_time, $body) = explode("|", $line); if ($schedule_date == date("Ymd", mktime(0, 0, 0, $_GET["month"], $_GET["day"], $_GET["year"])) && $title == $_GET["title"]) { //抽出結果を配列に格納 $data[] = array( 'sch_date'=>$schedule_date ,'title'=>"$title", 'str'=>$str_time, 'end'=>$end_time, 'body'=>"$body", 'no'=>$lineno); } } //開始時間(昇順)でソート //array_multisort($str, SORT_ASC, $end, $sch_date, $title, $body, $no, $data); foreach ($data as $key => $row) { $sch_date[$key] = $row['sch_date']; $title[$key] = $row['title']; $str[$key] = $row['str']; $end[$key] = $row['end']; $body[$key] = $row['body']; $no[$key] = $row['no']; } 表示結果(1)---------------------  print_r($data);  配列データの全体を表示すると、日本語も正しく表示されます。 Array ( [0] => Array ( [sch_date] => 20101225 [title] => 第一会議室 [str] => 1300 [end] => 1400 [body] => 打ち合わせ [no] => 1 ) 表示結果(2)---------------------  print_r($sch_date[0]); print_r($title[0]); print_r($str[0]); print_r($end[0]); print_r($body[0]); print_r($no[0]);  配列データの要素を指定して出力すると日本語が□になります。  20101225�13001400�1 以上、どなたかご教授下さい。 日付   会議室 開始時間 終了時間 使用者 20101225 �     1300    1400   �

    • ベストアンサー
    • PHP
  • phpでの日付の取得について

    PHPでサイト内に、1週間分の日付を表示させ 日付ごとに指定したページに移動するよう、リンクを張りたいと思っております。 以下で日付は表示できたのですが 日付と日付の間にスペースを入れたいです。 ※可能であれば曜日も表示させたいです。 ↓現在、このように表示されます。 1/181/191/201/211/221/231/24 また、日付ごどに指定サイトへリンクも貼りたと思ってます。 <?php $nday = mktime(); for($i=0;$i<7;$i++){ print date("n/j",mktime(0,0,0,date("m",$nday),date("d",$nday)+$i,date("y",$nday)))."<td>"; } ?> どなたか、ご教授いただけないでしょうか? 以上、宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPでカレンダー

    PHPを使ってカレンダーを作成しました。が、コードの意味が良く分かりません。 コードは以下の通りです。 <?php if($_GET['num']==''){ $today_year = date("Y"); //4桁の西暦年 $today_month = date("n"); //1~12の月 }else{ $timestamp = mktime(0,0,0,date("n")+$_GET['num'],date("d"),date("Y")); $today_year = date("Y",$timestamp); $today_month = date("n",$timestamp); //1~12月 } $current = mktime(0,0,0,$today_month,1,$today_year); $first_day = date("w",$current); //1日の曜日を0~6に当てはめる $last_day= date("t",$current); //月の日数 ?> <html> <head> <title>カンレンダー</title> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> </head> <body> <h1><?php print (date("Y年m月",$current)); ?>のカレンダー</h1> <table border="1" cellpadding="0" cellspacing="2"> <tr> <th>日</th><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th>土</th> </tr> <?php for($i=1; $i<=$first_day+$last_day; $i++){ if($i%7==1){print ("<tr>");} if($i>$first_day){ print ("<td>".($i-$first_day)."</td>"); }else{ print ("<td>&nbsp;</td>"); } if($i%7==0){print ("</tr>");} } ?> </table> </body> </html> for以降の部分が良く分かりません。よろしくお願いします。※上記のスクリプトで正しく表示されることは確認済です。

    • 締切済み
    • PHP

専門家に質問してみよう