配列(ハッシュ)のキーとバリューを入れ替える

phpのハッシュでキーとバリューを入れ替えるには、php_flip()という関数を
使用します。

以下に使用例を示します。

 "バリュー1",
    "キー2" => "バリュー2",
    "キー3" => "バリュー3",
    "キー4" => "バリュー4",
    "キー5" => "バリュー5",
    "キー6" => "バリュー6",
);

$array2 = array_flip($array1);

print_r($array1);
print_r($array2);
$ php tmp.php
Array
(
    [キー1] => バリュー1
    [キー2] => バリュー2
    [キー3] => バリュー3
    [キー4] => バリュー4
    [キー5] => バリュー5
    [キー6] => バリュー6
)
Array
(
    [バリュー1] => キー1
    [バリュー2] => キー2
    [バリュー3] => キー3
    [バリュー4] => キー4
    [バリュー5] => キー5
    [バリュー6] => キー6
)

mktime()の使い方。(今月初めのタイムスタンプを得たい。)

データベースにUNIXタイムスタンプ形式で日付データを保存していることは
よくあると思います。

そのデータベースに登録されたデータを、たとえば先月分だけ取り出したい
というときに、mktimeを使って簡単に得ることができます。

ちなみに、MySQLのDATE_FORMAT()を使えばもっと簡単にできますが、使えない
環境もあったり、複雑な処理はできなかったりするので、mktimeを使わざるを
得ないこともあると思います。

mktimeは指定された日時のunixタイムスタンプを作成してくれます。
以下のように使います。

$timestamp = mktime(時間、分、秒、月、日、年);

ただ、どっからでも省略でき、省略された部分はその時刻の値が入ります。

たとえば、以下のようにすると、このスクリプトを実行した日の8時10分30秒
のタイムスタンプが得られます。

$timestamp = mktime(8, 10, 30);

なので、今月の最初を表したいときは

$timestamp = mktime(0, 0, 0, date('n'), 1);

PHPでXMLの属性(attributes)情報を取得する方法。

属性の値は、対象のタグのSimpleXMLElementオブジェクトに対して、
attributesメソッドを使うことに依りその対象タグの属性一覧を得ることが
できます。

また、attributesメソッドで得られた結果もオブジェクトなので、
文字列として得たい場合は、stringでキャストする必要があります。

以下に例を示します。

<?php

$data = '';
$data .= "";
$data .= "";
$data .= "";
$data .= "";
$data .= "";
$data .= "";
$data .= "";
$data .= "";
$data .= "";

$xml = simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA);

foreach($xml->middle->item as $item){
        $attributes =  $item->attributes();
        $id = (string)$attributes['id'];
        $tag = (string)$attributes['tag'];

        echo "id:".$id. "  tag:".$tag."n";
}

実行結果

$ php test.php
id:1  tag:a
id:2  tag:b
id:3  tag:c
id:4  tag:d
id:5  tag:e

「Cannot use ‘Parent’ as class name as it is reserved in」と出た。

Parentというクラスを作ったら、以下のエラーが発生した。

PHP Fatal error:  Cannot use 'Parent' as class name as it is reserved in /home/hogehoge/public_html/hogehoge/src/My/TktracBundle/Entity/Parent.php on line 14

どうやら、”Parent”というキーワードでクラスを作ることはできないようです。

名前を変えたら解決しました。

PHPで「Fatal error: Class ‘DOMDocument’ not found in xxxx.」と出る

PHPで「Fatal error: Class ‘DOMDocument’ not found in xxxx.」というエラーがでた!!

DOMがPHPに組み込まれていないらしい。。。

php-xmlをインストールすればOKみたいです。

# yum install php-xml
# /etc/init.d/httpd restart

インストールしたら、apacheを再起動しましょう。

PHPでメールを送信したい

メールを送信するには mb_send_mail()関数を使用します。

mb_send_mail()はmail()のラッパー関数でヘッダと本文が mb_language() の設定に
基づき変換、エンコードされます。

たとえば、hogehoge@example.com宛てに、メールを送る場合は以下です。

// mb_send_mailが変換するための情報を設定します。
mb_language("Ja") ;
mb_internal_encoding("EUC") ;

// 宛先を決定
$to    = "hogehoge@example.com";
// 差出人を決定
$from  = "ho-gehoge@example.net";
// 件名を決定
$title = "こんばんわいん";
// メール本文を決定
$body  = "眠いnつらいn腕が痛い";

// メールを送信
$mb_send_mail($to, $title, $body, $from);