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

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

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

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

Q&A

解決済

1回答

3551閲覧

PHP:XMLを読み込んだ時に配列の有無による条件分岐を無くしたい

igaiga

総合スコア144

PHP

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

0グッド

0クリップ

投稿2016/07/25 06:02

###前提・実現したいこと
いつもお世話になっております。
XMLを読み込んだ時に$data['room']が配列の場合と配列じゃない場合で今まで分岐させていましたが、分岐させずに同じコードで処理するスマートな方法はないでしょうか。

今までだと、配列の場合と配列じゃない場合でほとんど同じ内容のコードを書いていたのですが、一部を変更した際に2か所直す必要がありました。
このままでも動くので問題ないのですが、もっとスマートに処理したいです。

###該当のソースコード

$url_cd = 0000;//IDを渡します $detail = "http://api.jp/?key=000&city_cd=" . $url_cd; $xml = simplexml_load_file($detail); $data = get_object_vars($xml); if (is_array($data['room'])) { //$data['room']が配列の場合の処理 }else{ //$data['room']が配列じゃない場合の処理 }

XMLの中身は下記のようになっていますが、SimpleXMLElement Object以降の要素名は一緒です。
XMLを呼び出した時に、エリア内(city_cd)で要素名にroomを持つものが、複数あるかどうかで、以下のように$data['room']の中身が変わります。

###配列の場合の$data['room']の中身(先頭部分)

Array ( [0] => SimpleXMLElement Object ( [room_cd] => ・・・

###配列じゃない場合の$data['room']の中身(先頭部分)

SimpleXMLElement Object ( [room_cd] => ・・・

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

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

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

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

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

guest

回答1

0

ベストアンサー

配列でなかった場合に、配列にしてしまえば、あとは配列として処理できます。

php

1$room_arr = is_array($data['room']) ? $data['room'] : [$data['room']];

なお、オブジェクトでない文字列や整数配列の場合、(array)$fooのようにキャストすると、「スカラー値なら1個だけ入った配列に変換、配列ならそのまま」という挙動になります。

投稿2016/07/25 06:09

maisumakun

総合スコア145183

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

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

igaiga

2016/07/25 06:23

ありがとうございます! ? $data['room'] : [$data['room']];部分が何をしているのか全く理解できていませんが、とりあえず希望通りにできました。 お手数でなければ、 ? $data['room'] : [$data['room']];部分の構文の名称等教えていただけますでしょうか。 以前、(array)$data['room']も試してみたのですが、オブジェクトだから駄目だったんですね。
igaiga

2016/07/25 06:39

ありがとうございます!助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問