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

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

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

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

Q&A

解決済

2回答

5778閲覧

php 配列の中身を非表示

shinoda

総合スコア75

PHP

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

0グッド

0クリップ

投稿2015/01/15 09:13

お世話になります。
配列の中身を非表示にする方法はありますでしょうか?

やりたいことはif(empty)などで中身がなかった場合に非表示にするみたいなプログラムを実装したいのですがうまく行かなくて困っています。
ご享受いただければ幸いです。

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

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

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

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

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

guest

回答2

0

コードが無いので、予測で書いてみたのですが、当たっていますかね?

lang

1<?php 2$array = array('aaa', 'bbb', 'ccc', '', false); 3 4foreach ($array as $value) { 5 if (!empty($value)) echo $value . "\n"; 6} 7 8/** 9* 出力結果 10* aaa 11* bbb 12* ccc 13*/

投稿2015/01/15 09:25

pikonori

総合スコア82

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

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

shinoda

2015/01/15 09:48

お世話になります。 詳しく説明させていただきます。 ************************************************ ["0"]["aaa"]["bbb"]["1"][no] ["0"]["aaa"]["bbb"]["1"][id] ["0"]["aaa"]["bbb"]["1"][type][name] ["1"]["aaa"]["bbb"]["1"][no] ["1"]["aaa"]["bbb"]["1"][id] ["1"]["aaa"]["bbb"]["1"][type][name] ************************************************ 上記のような配列がありまして多次元配列なのでforeachでうまく表示できなかったので今は echo "["1"]["aaa"]["bbb"]["1"][no] "; のように個別に呼び出しています。 また上記のような配列がその下にもあり検索をするときには echo "["1"]["aaa"]["bbb"]["$i"][no] "; のように$iに代入して検索しているのですが中身があるのとないものがあるのでない場合に非表示にしたいと考えております。 私の知識が乏しく質問も説明もわかりづらいとは思いますがご教授いただければ幸いです。
pikonori

2015/01/15 10:01

なるほど、別で回答します。
guest

0

ベストアンサー

このような形で実現出来ると思います。

lang

1$array = array(); 2 3$array[0]['aaa']['bbb'][1]['no'] = 1; 4$array[0]['aaa']['bbb'][1]['id'] = 101; 5$array[0]['aaa']['bbb'][1]['type']['name'] = ''; 6 7$array[1]['aaa']['bbb'][1]['no'] = 2; 8$array[1]['aaa']['bbb'][1]['id'] = 0; 9$array[1]['aaa']['bbb'][1]['type']['name'] = '鈴木'; 10 11foreach ($array as $value) { 12 $users = $value['aaa']['bbb'][1]; 13 14 if (!empty($users['no'])) echo $users['no'] . "\n"; 15 if (!empty($users['id'])) echo $users['id'] . "\n"; 16 if (!empty($users['type']['name'])) echo $users['type']['name'] . "\n"; 17}

配列を利用しているのであればforeach等を、利用しないと意味が無いです。
あと、何故うまく動作しなかったのか確認したいので、実際に書いたコードもこちらに貼って頂けると、より良い回答ができると思います。

投稿2015/01/15 10:05

pikonori

総合スコア82

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

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

shinoda

2015/01/15 10:23

ご回答された件はテストをしてみて結果を報告します。 foreachで書いたコードですが以下のような感じです。 ********************************************* foreach ((array)$obj as $key1 => $value1) { foreach ((array)$value1 as $key2 => $value2) { foreach ((array)$value2 as $key3 => $value3) { foreach ((array)$value3 as $key4=> $value4) { echo "$value4"; } } } } ************************************************* このようにひたすらネストして取り出そうとしたのですが上記の例で言うと4階層目は表示できるのですが他の階層は全てエラーになってしまいました。 私もどうにかforeachで表示したかったのですがこちらで質問させて頂いても解決策は見つからず個別に書きだすといったかたちになりました。 ご教授の程よろしくお願い致します。
pikonori

2015/01/15 10:35

配列の構造でどのようなパターンがあるのか知りたいです。 例えば、 $array[0]['aaa']['bbb'][1]['no'] = 1; 'aaa'や'bbb'は変わる可能性があるのか? 階層の深さは変わるのか? などなど
shinoda

2015/01/15 10:51

追記いたします。 現在jsonファイルをphpでデコードしているのですが下記にコードを書きます ******************************************************** // ファイルからJSONを読み込み $json = file_get_contents("test_1.json"); // 文字化けするかもしれないのでUTF-8に変換 $json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); // オブジェクト毎にパース // trueを付けると連想配列として分解して格納する。 $obj = json_decode($json, true); // パースに失敗した時は処理終了 if ($obj === NULL) { echo("失敗"); return; } *********************************************************** この場合上記のご回答に当てはめた場合 foreach ($obj as $value) { $users = $value['aaa']['bbb'][1]; if (!empty($users['no'])) echo $users['no'] . "\n"; if (!empty($users['id'])) echo $users['id'] . "\n"; if (!empty($users['type']['name'])) echo $users['type']['name'] . "\n"; } 上記のように書けばいいのでしょうか? またキーを取り出したい場合は foreach ($obj as $key1 => $value1) このように書けばいいのでしょうか? よろしくお願いいたします。
pikonori

2015/01/15 11:03

取り敢えずtest_1.jsonの中身が見えないと回答しにくいですが。 $array[0]['aaa']['bbb'][1]['no'] = 1; $array[0]['aaa']['bbb'][1]['id'] = 101; $array[0]['aaa']['bbb'][1]['type']['name'] = ''; $array[1]['aaa']['bbb'][1]['no'] = 2; $array[1]['aaa']['bbb'][1]['id'] = 0; $array[1]['aaa']['bbb'][1]['type']['name'] = '鈴木'; という構造であれば foreach ($obj as $value) { $users = $value['aaa']['bbb'][1]; if (!empty($users['no'])) echo $users['no'] . "\n"; if (!empty($users['id'])) echo $users['id'] . "\n"; if (!empty($users['type']['name'])) echo $users['type']['name'] . "\n"; } で問題無いです。 > またキーを取り出したい場合は > foreach ($obj as $key1 => $value1) foreach ($obj as $key => $value) 「1」は不必要なので上記のような形で問題無いと思います。 試しに動作させて挙動を確認してみてください。 あと、配列の構造を把握してから、構築しないと意図せぬ動きになると思います。 一度、$objをvar_dumpなどでデバックして、構造を確認してみると良いかもしれません。
shinoda

2015/01/16 02:27

お世話になっております。 ご回答の件はこれから試してみたいと思います。 下記にjsonの構造を書いておきます。 ************************************** { "aaa": { "bbb":[ { "no":"1", "groupname":"nagoya", "groupname_j":"名古屋", "basename":"zzz", "name":"yyy", "choice":"-", "typename":"フリー", "type":"free", "types":[ {"name":"フリー","type":"free"} ] } { "no":"2", "groupname":"nagoya", "groupname_j":"名古屋", "basename":"ccc", "name":"vvv", "choice":"-", "typename":"フリー", "type":"free", "types":[ {"name":"フリー","type":"free"} ] } ] } } ********************************************* このような感じになっております。 [0][aaa][bbb][0] 最後の[0]部分が[0][1][2]と続いていく感じです。 最後に全体的な流れを説明させていただきます あるjsonファイル(オブジェクトで書かれている)をphpでデコードしてパースして連想配列に格納したものをphpで配列の追加、削除、編集してjsonファイルにエンコードするといった流れになります。 jsonファイルは私が作ったものではなくできるだけjsonファイルの構造を崩さず実装したいと考えております。 それではよろしくお願い致します。
shinoda

2015/01/16 02:39

追記いたします。 ただいまご回答の件を試しましたが Notice: Undefined index: aaa in というエラーがでました。 もう少し試してみたいと思います。
shinoda

2015/01/19 10:36

お世話になっております 色々と試した結果やはりforeachではうまくいきませんでした。 お手隙の時にでもご教授いただければ幸いです。
pikonori

2015/01/19 12:19

<?php $json = json_decode(file_get_contents('array.json'), true); foreach ($json['aaa']['bbb'] as $key => $value) { foreach ($value as $userKey => $userValue) { if (is_array($userValue)) { foreach ($userValue[0] as $typeKey => $typeValue) { echo (empty($typeValue))? '' : "{$typeKey} : {$typeValue}\n"; } } else { echo (empty($userValue))? '' : "{$userKey} : {$userValue}\n"; } } } このような感じでどうでしょうか? ちょっとtypesにどのようなデータが入るか分からないので、is_array部分の実装が微妙ですが。
shinoda

2015/01/23 04:40

お世話になっております ご回答に気づかずご連絡が遅くなっていしまい申し訳ありません ご回答の件は週明けに結果を報告いたします
shinoda

2015/01/23 11:23

お世話になっております 先ほど試しましたが危惧されていたとおりis_array部分でエラーが出ました 追加で質問なのですが ************************************************ $json = json_decode(file_get_contents('test_10.json'), true); $_SESSION["i"] = ($_POST["id"]); $i = htmlspecialchars($_SESSION["i"],ENT_QUOTES); echo '<table id="name" border="1" >'; foreach ($json['aaa']['bbb'] as $key => $value) { foreach ($value as $userKey => $userValue) { if (is_array($userValue)) { foreach ($userValue["0"] as $typeKey => $typeValue) { echo (empty($typeValue))? '' : "<tr><th>{$typeKey}</th><td> {$typeValue}</td></tr>\n"; } } else { echo (empty($userValue))? '' : "<tr><th>{$userKey}</th><td>{$userValue}</td></tr>\n"; } } } ******************************************************* 今回このようにテーブルに表示したのですが上記の ($json['aaa']['bbb']['$i'] as $key => $value) $iに前ページのフォームから来た数字を使って検索のようにしたいのですがうまく行きません よろしかったらご教授お願い致します。
pikonori

2015/01/23 11:52

is_arrayの部分は中身次第なので書けません。 ************************************************ $json = json_decode(file_get_contents('test_10.json'), true); $_SESSION["i"] = ($_POST["id"]); $i = htmlspecialchars($_SESSION["i"],ENT_QUOTES); // $json['aaa']['bbb'][$i]が存在したらテーブル作成 if (!empty($json['aaa']['bbb'][$i])) { echo '<table id="name" border="1" >'; foreach ($json['aaa']['bbb'][$i] as $userKey => $userValue) { if (is_array($userValue)) { // ここの挙動はtypesの中身によるので、書くのは無理です。 } else { echo (empty($userValue))? '' : "<tr><th>{$userKey}</th><td>{$userValue}</td></tr>\n"; } } echo '</table>'; } ************************************************ 基本的な部分で躓いているようなので、もう一度入門書などを購読したほうが良いかもしれません。
shinoda

2015/01/23 12:07

早速のご回答ありがとうございます。 上記のコードで検索が出来ました。 仰るとおりに基本からやりなして更に勉強したいと思います。 is_arrayの件なのですがjsonファイルの中は下記のようになっています ****************************************************** "types":[ { "name":"フリー", "type":"free" } ], ****************************************************** pikonori様の言っている質問とは全く違うこと書いているのかもしれませんが何卒宜しくお願い致します。
pikonori

2015/01/23 12:23

コレでいかがでしょうか? ****************************************************** $json = json_decode(file_get_contents('test_10.json'), true); $_SESSION["i"] = ($_POST["id"]); $i = htmlspecialchars($_SESSION["i"],ENT_QUOTES); // $json['aaa']['bbb'][$i]が存在したらテーブル作成 if (!empty($json['aaa']['bbb'][$i])) { echo '<table id="name" border="1" >'; foreach ($json['aaa']['bbb'][$i] as $userKey => $userValue) { if (is_array($userValue)) { echo (empty($userValue[0]['name']))? '' : "<tr><th>name</th><td>{$userValue[0]['name']}</td></tr>\n"; echo (empty($userValue[0]['type']))? '' : "<tr><th>type</th><td>{$userValue[0]['type']}</td></tr>\n"; } else { echo (empty($userValue))? '' : "<tr><th>{$userKey}</th><td>{$userValue}</td></tr>\n"; } } echo '</table>'; }
shinoda

2015/01/26 02:53

お世話になっております typeの部分はうまくいきました。 typeの部分のように下の階層にあるものは同じようにその下に書き足していけばいいのでしょうか? 書き足してみたのですが一番上のキーと要素だけが取り出されてしまいました。 このコードは[aaa][bbb][$i]の階層までを$userValueに格納してその下のif文の$userValue[0]['name']のところで$userValueよりも下の階層をループさせているという認識であっていますでしょうか? $userValue[0]の[0]が理解ができなくて悩んでおります。 ご教授いただければ幸いです。
pikonori

2015/01/26 04:08

> このコードは[aaa][bbb][$i]の階層までを$userValueに格納してその下のif文の$userValue[0]['name']のところで$userValueよりも下の階層をループさせているという認識であっていますでしょうか? と言うよりはtypesのデータ次第ですので、書き方は色々存在しますが、shinodaさんが提示したtypesのデータだと、この書き方で要求は満たせると判断しました。 データのパターンを洗い出して、コーディングした方が良いと思います。 あくまでも参考程度のコーディングだと判断して下さい。 > $userValue[0]の[0]が理解ができなくて悩んでおります。 単純に、typesの配列が "types":[ { "name":"フリー", "type":"free" } ], のようになっているので、typesの中には配列で1つの要素だけ入っていると判断しています。
shinoda

2015/01/26 06:57

お世話になっております ご丁寧に説明有り難うございます。 ということは "types":[ { "name":"フリー", "type":"free" }, { "name":"フリー", "type":"free" }, ], このようになっていた場合はどうすればよいのでしょうか? []を空にすればいいのでしょうか?
pikonori

2015/01/26 07:25

[]では動かないです。 複数存在する場合は、foreachで実装すれば良いと思います。
shinoda

2015/01/26 07:33

ということは foreach ($json['aaa']['bbb'][$i] as $userKey => $userValue) の下に foreach ($json['aaa']['bbb'][$i]['types'] as $userKey => $userValue) をネストするということですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問