2014年03月22日

[PHP] 配列の空要素を削除する

フォームで入力させて、入力項目がオプションの時等に、配列が空の場合がある。
計算したい時や空を除いて処理したい時とか、要素としては邪魔なので削除したい。
そんな時には、array_filter()を使用するの方法があるようだ。

配列の空要素を削除する

真ん中が空の配列を作成して、array_filter()を実行してみる。

$valueArray = array(1,2,'',4,5);
print_r($valueArray);
$valueArray = array_filter($valueArray);
print_r($valueArray);

結果は以下のようになる。

Array ( [0] => 1 [1] => 2 [2] => [3] => 4 [4] => 5 ) 
Array ( [0] => 1 [1] => 2 [3] => 4 [4] => 5 ) 

ちゃんと空の3つめの要素が削除されている。

配列の添え字を振りなおす

array_filter()を実行するだけだと、配列の添え字は元のまま。
添え字でアクセスする場合等は振り直したい。
そういう場合は、array_values()を更に実行すると振り直してくれる。

$valueArray = array(1,2,'',4,5);
$valueArray = array_values(array_filter($valueArray))
print_r($valueArray);

結果は以下のようになり、0、1、3、4だったのが、0、1、2、3に変わっている。

Array ( [0] => 1 [1] => 2 [2] => [3] => 4 [4] => 5 ) 
Array ( [0] => 1 [1] => 2 [2] => 4 [3] => 5 )

なるべく配列の順序には依存しないプログラムにしたいけど、何かあった時には使えそう。

参考

タグ:PHP cakephp
posted by lute at 21:00| Comment(0) | TrackBack(0) | PHP | このブログの読者になる | 更新情報をチェックする

[CakePHP2.x] フォームから保存時にデータを追加する方法

フォームからデータ入力してもらって、合わせて値を追加して保存したい(例えば入力してもらった値の平均値とか)という時に、どうやれば良いのかわからなかったので調べた。
つまり、連想配列への追加をどうやるかっていう話なんだけど。

<?php
public function add() {
        if ($this->request->is('post')) {
            $this->Post->create();
            if ($this->Post->save($this->request->data)) {
                $this->Session->setFlash(__('Your post has been saved.'));
                return $this->redirect(array('action' => 'index'));
            }
            $this->Session->setFlash(__('Unable to add your post.'));
        }
    }
?>

上記がチュートリアルのBlogのコード。
実際にフォームで入力したデータが、連想配列で以下に入ってくる。

$this->request->data

その時、Postテーブルのhogehogeという行にも、ユーザーが入力していないけど値を追加したいという時は、 saveの前に以下のように連想配列に追加すれば出来る。
以下は、hogehogeにvalという値を追加して保存している。

$this->request->data['Post']['hogehoge'] = 'val';
$this->Post->save($this->request->data)
posted by lute at 13:59| Comment(0) | TrackBack(0) | CakePHP | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。