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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Q&A

解決済

2回答

1952閲覧

FuelPHPのコントローラーで2つの配列をmergeするにはどうしたら良いでしょうか?

miconear

総合スコア31

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

0グッド

0クリップ

投稿2015/08/20 01:43

fuelPHPを使用して7日目になります。
初歩的な質問になるのかもしれませんが宜しくお願い致します。

入力フォームのViewは出来上がったのでコントローラー側で入力フォームを取り扱うフィールドを配列で $fields へ設定しました。

下記がそのソースデータになります。

class Controller_Input extends Controller_Base { private $fields = array('rank','name','areas','email','zip_code'); // 更に配列は有りますが割愛します。 public function action_index() { // フォームのsubmitボタンを押された時 if (Input::post('submit')) { // postされた各データをフラッシュセッションに保存 foreach ($this->fields as $field) { Session::set_flash($field, Input::post($field)); } } $data = array(); return View::forge('index',$data); }

こちらで問題なく動作しますが配列が多いので分かり易くした方が見やすいのでmergeしたらどうだろう?
という考えになりました。

そしてソースコードをこのようにしてみましたがエラーになりました。

class Controller_Input extends Controller_Base { public $steArray = array('style.n0','style.n1','style.n2','style.n3'); // 更に配列数ありますが割愛します。 public $etcArray = array('rank','name','areas','email','zip_code'); private $fields = Arr::merge($steArray, $etcArray); public function action_index() { // フォームのsubmitボタンを押された時 if (Input::post('submit')) { // postされた各データをフラッシュセッションに保存 foreach ($this->fields as $field) { Session::set_flash($field, Input::post($field)); } } $data = array(); return View::forge('index',$data); }

ErrorException [ Parsing Error ]:
syntax error, unexpected '(', expecting ',' or ';'

このようになり、エラーを解決するにはどうしたら良いでしょうか?

private $fields = Arr::merge($this->steArray, $this->etcArray);

としてみましたがダメでした。

恐れ入りますが、ご教授の程どうぞ宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

クラスのプロパティの初期値は定数値でなければなりませんので

action_index内でマージすることになると思います。

PHP

1 $fields = Arr::merge($steArray, $etcArray); 2 foreach ($fields as $field) { 3 Session::set_flash($field, Input::post($field)); 4 }

投稿2015/08/20 02:31

icham

総合スコア559

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

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

miconear

2015/08/21 01:41

ご回答有り難う御座います。 定数値でしたね、、ついうっかりしていました。 お恥ずかしい(*_*;
guest

0

ベストアンサー

PHPマニュアル:プロパティ

宣言時に初期値を設定することもできますが、初期値は定数値でなければなりません。 つまり、コンパイル時に評価可能な値でなければならず、 実行時の情報がないと評価できない値であってはいけないということです。

なので、変数宣言時に関数を使って求めた値を代入することはできません。
(netBeansとかのIDEで書いていると、実行前にエラーを出してくれると思いますが…)

やるなら、beforeメソッド内でマージすればいいと思います。

lang

1class Controller_Input extends Controller_Base 2{ 3// この二つはpublicにする必要ある変数? 4 public $steArray = array('style.n0','style.n1','style.n2','style.n3'); 5 public $etcArray = array('rank','name','areas','email','zip_code'); 6 7 private $fields; 8 9 public function before() 10 { 11 parent::before(); 12 13 $this->fields = Arr::merge($this->steArray, $this->etcArray); 14 } 15 16 17 public function action_index() 18 { 19 20 var_dump($this->fields); 21 22 } 23}

ただ見やすさだけで配列分けてマージする処理を入れるなら
書き方の工夫で見やすくできるのかなとも思いますがどうでしょうか?

lang

1 private $fields = array( 2 // steArray 3 'style.n0','style.n1','style.n2','style.n3', 4 5 // $etcArray 6 'rank','name','areas','email','zip_code', 7 );

投稿2015/08/20 02:27

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

miconear

2015/08/21 01:49

ご回答有り難う御座います。 そうでした・・初期値は定数値でなければダメでしたね(*_*; マージの処理を入れると若干処理が遅くなりそうなので書き方の工夫を参考にして進めたいと思います。 とても勉強になりました。 又ご質問するかもしれませんが宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問