- PHPでの多次元配列のソート
- 2011.11.22
1次元配列のソートは「asort」などで可能ですが、多次元配列のソートはこれまで自作の関数を使ってやってましたが、今回めちゃくちゃ簡単にできる「array_multisort」を使用してみました。
たとえば以下のような配列があった場合、volume の降順、 edition の昇順に並べ替える場合の処理の例は・・・
$data[] = array(’volume’ => 67, ‘edition’ => 2);
$data[] = array(’volume’ => 86, ‘edition’ => 1);
$data[] = array(’volume’ => 85, ‘edition’ => 6);
$data[] = array(’volume’ => 98, ‘edition’ => 2);
$data[] = array(’volume’ => 86, ‘edition’ => 6);
$data[] = array(’volume’ => 67, ‘edition’ => 7);// 列方向の配列を得る
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}// データを volume の降順、edition の昇順にソートする。
// $data を最後のパラメータとして渡し、同じキーでソートする。
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);これだけでOK!
$dataは参照渡しになるみたいなのでそのまま$dataを使用すればソート済みのデータを扱う事が出来る。
【参考】
http://jp2.php.net/array_multisort
PHP
- PHPで数字の先頭の0(ゼロ)を削除
- 2011.02.25
日付の処理なんかやってると01月とか05日とか数字の先頭に0ゼロが付いてるケースがあり、忘れた時のために、簡単に先頭の0を削除する方法をメモ
$hogehoge //先頭に0が付いている変数
ltrim($hogehoge, 0);
これで先頭のゼロが削除できる。
めちゃくちゃ簡単
PHP
- んっ cronでpearが動かない!?
- 2010.05.27
ブラウザから起動すると正常に動くプログラムがcronだと動かないというのはたまにある現象だし、今までは殆どの場合、パスの違いが原因でした。
今回、pearをcronで動かしたかったのだが、動かなかったので、include_pathを調べてみたが合ってる様子。
色々試してみたところ、PHPがセーフモードの為、動かなかったのが判明した。
ブラウザで起動する場合は、php.ini、httpd.conf、.htaccessの設定を読むが、cron(CLI)ではデフォルトはphp.iniのみだそうなので、php.iniのsafe_modeをOffにしようとも思ったが、そうするとサーバ全てに反映されてしまい、セキュリティ上好ましくない為、cronの記述に「/usr/bin/php -d safe_mode=off」のように -d safe_mode=off を追加することにより問題が解消されました。
- 携帯サイトでのmailto使用について
- 2010.02.05
携帯サイトを作成していて mailto リンクで件名と本文を指定するのに下記のように指定します。
<a href=”mailto:メールアドレス?subject=件名&body=本文”>
このとき、件名と本文はURLエンコードする必要があるのだが、キャリアによって渡す文字コードに違いがあります。
DoCoMo、au は shift_JIS に変換してから URLエンコード、SoftBankはUTF-8にしてからURLエンコードしないと文字化けが起こります。
ですので、アクセスされた端末を判別し、それに合わせた文字コードに変換しURLエンコードするという手順になります。サンプルコードはこんな感じ
<a href=”mailto:?subject=<?php echo urlencode(mb_convert_encoding(’題名’, ’sjis’));?>&body=< ?php echo urlencode(mb_convert_encoding(’本文’, ’sjis’))?>”>友達に知らせる</a>
- 空メールでPHPを起動する
- 2010.01.21
空メール処理を作成したので、メモします。
1.空メール送信用メールアドレス作成
2.受信メールボックスにメールが来たらPHPを起動するため、.qmailを編集。
使えるネットの場合、/var/qmail/mailnames/自分のドメイン/追加したメールアカウント/に.qmailがあるので、SSHで接続し、該当ディレクトリに移動してmoreコマンドなどで内容を表示してみると[root@*********]# more .qmail
| true
| /usr/bin/deliverquota ./Maildirとなっているので、1行目に以下の行を追加。
| /usr/bin/php -d safe_mode=off /var/www/vhosts/自分のドメイン/private/mail.php
※この例では、privateディレクトリのmail.phpを起動する
(セキュリティの為、ウェブでアクセス出来ないディレクトリに保存)
privateディレクトリのパーミッションは705※PHPプログラムの起動のみで、メールは受信したくない場合は、最初から入っている記述をコメントアウト。
#| true
#| /usr/bin/deliverquota ./Maildir3.mail.phpに処理を記述
ただし、PHPプログラムの中で、絶対パスで読み込むと上手くいかないっぽいので要注意!
【×】→ require_once( “/var/www/vhosts/自分のドメイン/httpdocs/hogehotge/hogehoge.php” );
と、このような処理になるのだが、動かなくて大分苦労しました。
結局privateディレクトリのパーミッションが原因だと分かり無事解決
