PHP

重み付けによる抽選ロジック

PHP

// 以下の配列から抽選で一つを抽出したい $things = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', ]; // 重み付けをする // この設定だと5番目のもの($thingsの'e')が最も出やすい // 0のものは出ない $rate = '10,20,13,24,35,0,0,0,0,5'; $rate_…

PHPUnitのアップグレードやアンインストール等

PHP

sudo vim /etc/php.ini 以下を追記 include_path = ".:/php/includes:/usr/lib/php/pear"sudo pear upgrade PEAR pear config-set auto_discover 1 sudo pear install pear.phpunit.de/PHPUnit-3.7.32 phpunit -v PHPUnit 4.0.11 by Sebastian Bergmann. ア…

DirectoryIteratorの活用

PHP

主な仕様 PHP: DirectoryIterator - Manual 再帰的にディレクトリを削除する is…

PHPあれこれ

PHP

ファイルダウンロード機能

テストコードあれこれ

Composerを使ってPHPUnitをインストールする composer.jsonの中身 "require-dev": { "phpunit/phpunit": "3.7.*" } composerのインストールコマンドを叩いてPHPUnitをインストール $ ./composer.phar install --dev PHPUnitがインストールされたかどうかを確…

メソッド名を可変にする

PHP

渡された変数によってメソッド名を書き換えて実行したい場合、例えば、 findItems() findHogeItems() findGehoItems() …という三種類のメソッドを使い分けたいときは、以下の様な方法でメソッド名を可変にして実行することができる。 function executeByStat…

GithubとComposer管理

Githubに追加したプロジェクトをComposerで管理する。 GithubとPackagistとの連携 Githubのリポジトリ毎の設定画面 Composerのダウンロード curl -s http://getcomposer.org/installer | php composer.jsonの作成 Packagistでアカウント作成 https://packagi…

日付関数で遊ぶ

PHP

date()を使ったあれこれ

連想配列の並べ替え集

PHP

ランダムに並べ替える $words = array( array( ‘id’ => 0, ‘name’ => ‘労’, ), array( ‘id’ => 1, ‘name’ => ‘働’, ), array( ‘id’ => 2, ‘name’ => ‘審’, ), array( ‘id’ => 3, ‘name’ => ‘判’, ), ); // idの配列を作る $ids = range(0, count($words)-1);…

ランダムに複数の抽出結果を取得する

CakePHP2で、 ‘order’ => ‘rand()’ として検索結果をランダム取得しようとしていたが、生成されたSELECT文には ORDER BY rand() ASC と指定されていて、更にEXPLAINで調べてみたところ、見事にExtraの項目に、 Using where; Using temporary; Using file sor…

セレクトボックスの"onChange"

PHP

セレクトボックスで「項目選択と同時にPOST送信する」のような挙動を実装する場合。 <form action="<?php echo $_SERVER['REQUEST_URI'] ?>" method='post'> <select name=“mySelectBox” onChange="this.form.submit()"> </select></form>

GithubへのPush

sshでGitにつなげるかどうかの確認 実際にpushしたファイル。 https://github.com/hchuno/php_product/blob/master/paiza_hackason01.php

Macで作成したCSVファイルの読み込みがうまくいかない件

PHP

現象 Mac環境で以下のような二行のレコードからなるCSVファイルを作成。 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28 これをfgetcsv()で読み…

"There is no active transaction"

現象 対処法 補足 例外発生の原因 routing.ymlで未定義のURLにリダイレクトさせようとしていた

PHP5.4のビルトインWEBサーバ&Symfony2

以下のSymfonyコマンドを打てばビルトインWEBサーバが起動。 $ php app/console server:run Apacheを入れなくてもアプリが動かせる!

Symfony2開発環境構築 -PHPUnit編-

PHPUnitのインストール その前にPEARをインストールする。 $ chmod -R ug+w /usr/local/Cellar/php54/5.4.15/lib/php$ pear config-set php_ini /usr/local/etc/php/5.4/php.ini $ pear config-set auto_discover 1$ pear install pear.phpunit.de/PHPUnit$ …

database.phpとDB接続

現象 CodeIginiterからデータベースへの接続ができない… config/database.phpで $db['default']['autoinit'] = TRUE; とすると以下のエラー。 $db['default']['autoinit'] = FALSE; とすると、エラーは出ないが $this->load->database(); の戻り値がFALSE。 …

data-load時の文字化け対策

synfony 1.4で 「symfony doctrine:data-load をしたら文字化けする」 と同僚に言われ。 問題はテーブル生成時にUTF8を扱うようになっていないためらしい。config/databases.ymlのデータベース接続定義で以下を追加する。 encoding: utf8 attributes: defaul…

PHP

date関数やstrtotime関数を使ったときにWarningが出る問題

Warningの内容 strtotimeの場合 Warning: strtotime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those me…

instanceofを使いましょう

PHP

PHP Strict Standards: is_a(): Deprecated. Please use the instanceof operator in /home/chuno/mixi-mychuno/apps/mychuno/lib/myChuno.action.php on line 24

limeテストでテンプレート内の要素をチェックする

「divタグ等にidを振ってそれが存在するかどうか」が基本方針。

配列の差分をとる関数array_diff()

PHP

片方の配列には含まれているが、もう片方の配列には含まれていない要素を抽出したい場合に使う。 http://php.net/manual/ja/function.array-diff.php

真偽値を反転して反転して反転して…

PHP

こんな書き方もできるんだなーということを知った。 $isBikkuri = false; var_dump($isBikkuri); var_dump(!$isBikkuri); var_dump(!!$isBikkuri); var_dump(!!!$isBikkuri); 出力結果は… bool(false) bool(true) bool(false) bool(true)

json_decodeでハマる

PHP

最近、以下の関数を使って、データをJSON形式で扱うことが増えてきたが… json_encode() json_decode() ある値をjson_decodeでJSON形式から戻して配列として扱おうとしたら、以下のエラーが発生してハマってしまった。 PHP Fatal error: Cannot use object of…

Only variables can be passed by reference

原因 参照渡しを要求するメソッドの引数に直接、値を渡してしまうと発生。 解決策 渡したい値を一旦変数に格納 その変数を引数としてメソッドに渡す

乱数の生成に使う関数

PHP

rand()かなと思っていたら、今だとmt_rand()というのがあって、こちらのほうが処理が高速で、かつ返ってくる値も正確とのこと。 ※そういえば、randの時って偏った数値ばかり返ってきてた気がする… // 1から100の中からランダムに数字を返す $randomNum = mt_…

PHPを認識させるための設定

Apache2を起動 アップルメニュー→System Preference→Sharing→Web Sharingをチェック /usr/apache2/apachectlを編集 以下の現象が発生してApacheの再起動等ができなかった /usr/sbin/apachectl: line 82: ulimit: open files: cannot modify limit: Invalid a…

PHP用のオプション色々

メソッドの「折り畳み表示」を有効にする 既にVimにプラグインが入っていればvimrcに以下を追記するだけ(最近のVimなら大丈夫っぽい)。 "php_method_folding let php_folding = 1 使い方 あるメソッドを「開く」→zo あるメソッドを「閉じる」→zc ※oはOpenの…

負荷を抑えたページング処理

1億件のレコード 1ページに100件表示 未表示のレコードが存在する場合、現在のページに次へリンクを表示 …例えば、上記のような条件でページング処理を実装したい場合。 全件取得のクエリを投げたりすると負荷の掛かり方が半端じゃないので、それはNG。 1ペ…