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

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

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

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

Zend Framework 2

Zend Framework 2は、PHP 5.3以上に対応している MVCフレームワークとコンポーネントライブラリーの集合です。

Q&A

2回答

2461閲覧

Zend Framework2で foreachのすべての要素を viewに表示するための記述

hinano_otsubo

総合スコア10

PHP

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

Zend Framework 2

Zend Framework 2は、PHP 5.3以上に対応している MVCフレームワークとコンポーネントライブラリーの集合です。

0グッド

0クリップ

投稿2015/08/16 15:15

こんにちは。
初心者です、よろしくおねがいします。

質問をしながらプログラミングを進めております。

タイトルに関してですが、
今、Zend Framework2でプログラムを記述しています。
そこで質問です。

いま、controller部分に、
foreach文を使ってmodelのarrayから要素を引っ張ってきて、
viewに渡すコードを書いています。

表示したいのはarrayに入っているすべての要素なのですが、

PHP

1foreach ($getParamByKeyword as $key => $value){ 2 $result = $getParamByKeyword[$key]["title"]; 3 $image = $getParamByKeyword[$key]["imageurl"]; 4 } 5 6 $this->view->result = $result; 7 $this->view->image = $image;

だと$result,$imageにはarrayの最後の要素しか残りません。
よってviewに表示されるのは最後の情報だけになってしまいます。

引っ張ってきたすべてのarrayの要素を上書きせずに保存して、
viewまで持っていくことのできる方法はありますか?

別の質問サイトで、
『どんなMVCでも「繰り返しのあるデータ」をviewに表示するための記述法(配列にするとか)があるはず』
と教えていただいたのですが、何が何やらさっぱりで…。

はじめのとっかかりだけでもいいので何かあれば教えてください。
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

$this->view->resultがview側でどうアクセスできるかわからないので当てずっぽうですが...

controllerにて

PHP

1$this->view->result = $getParamByKeyword;

viewにて

PHP

1<dl> 2<?php foreach ($this->result as $key => $value): ?> 3 <dd><?= $key ?></dd> 4 <dt><img alt="<?= htmlspecialchars($value["title"]) ?>" src="<?= $value["imageurl"] ?>" /></dt> 5<?php endforeach; ?> 6</dl>

こんな雰囲気ではないでしょうか?

投稿2015/08/18 13:39

編集2015/08/18 13:49
ikeyan

総合スコア136

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

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

0

php

1foreach ($getParamByKeyword as $key => $value){ 2 $result = $getParamByKeyword[$key]["title"]; 3 $image = $getParamByKeyword[$key]["imageurl"]; 4}

これではせっかく回してるのに、 $result , $image を上書きしているので最後の値しか持たないのは当たり前。

$this が何のクラスか知らんけど、

php

1$this->view->result = $getParamByKeyword;

こうすればいいだけじゃないんですかね…。つまり、foreach 不要。

投稿2015/08/16 15:35

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

hinano_otsubo

2015/08/16 16:07

早速ありがとうございます。 ええと…、 $this->view->result = $getParamByKeyword; だと、arrayもなにも出てこないと思うのですが、 私の質問の仕方がどこかおかしかったのでしょうか…。 上書きしているというのは自分でもわかっていて、 それを上書きしないでそれぞれ保持してくれる処理があれば…と思って質問しました。 なさそうですかね。変な質問してすみませんでした。
退会済みユーザー

退会済みユーザー

2015/08/16 16:13

単純に、$result を view 側で展開するだけじゃないかと思います。
hinano_otsubo

2015/08/16 16:38

はい、$resultをview側で展開したいのですが、 $this->view->result = $getParamByKeyword; は$result の展開ではないですよね。 $getParamByKeyword の中に$result や$image が格納されていて、 それだけを取り出したいのですが、 foreachで取り出すと上書きを重ねて最後のだけしか見れず、 かといってechoだとviewに渡すまえにcontrollerから表示されてしまい。 私の知識不足でKousuke_shibuyaさんのアドバイスをうまく理解できておらず申し訳ないです、ありがとうございます。
退会済みユーザー

退会済みユーザー

2015/08/16 16:50 編集

$this->view->result = $getParamByKeyword; var_dump($this->view->result); これでちゃんと格納されているのは確認できるでしょ? まさか、公式リファレンスも読まずに質問してません?
landy77

2015/08/16 19:36 編集

横からですが、単純に $result=array(); $image=array(); foreach ($getParamByKeyword as $key => $value){ $result[] = $value["title"]; $image[] = $value["imageurl"]; } って事がしたいわけじゃ無いですか?
退会済みユーザー

退会済みユーザー

2015/08/16 20:18 編集

landy77さん まあ、質問自体はそうなのはわかるんですが… たんに配列を入れ直してるだけですからね… その処理自体が無意味…
hinano_otsubo

2015/08/17 03:16

みなさんありがとうございます。もう少し考えてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問