« Macintoshのメーラー | メイン | テンプレ変更 »

2004年03月17日

array_diff関数の動作(PHP)

思ったように動作しなくて数週間悩んでいて、やっと今日理由がわかったので、書いておきます。

PHPの関数「array_diff」について、技術評論社『PHPポケットリファレンス』(2003年3月15日発行初版第一刷)には

array_diff関数は、それぞれの配列を比較し、共通しない要素のみ含まれる値を持った配列を返します。戻り値の配列の添え字は保存されます。

と書かれてあったので、第1引数と第2引数の比重は同じで、
array_diff($a,$b)
でも
array_diff($b,$a)
でも同じ結果を返すと思っていました。
ところが、本家のマニュアルを読んでみると、どうやら意味合いがちょっと違うらしい。
わかりやすく書くと、「第1引数の中から第2引数以降にない要素を返す」っていうことなんですね。

/*array_diff関数サンプル*/
$a = array("メシアン","ジョリヴェ","ハラダ タカシ","マルトノ");
$b = array("マルトノ","メシアン","ジョリヴェ");

$result0 = array_diff($b,$a);
$result1 = array_diff($a,$b);

var_dump($result0);
var_dump($result1);
/*サンプルここまで*/

このサンプルの結果は
array(0) { }
array(1) { [2]=> string(13) "ハラダ タカシ" }
となります。

『PHPポケットリファレンス』って使えないなぁ。増刷分で加筆してあるのかな?
今回の記述不足に限らず、このリファレンス本には日本語のワード索引がないってのも致命的。
小さくて場所取らないから使いやすいんだけど残念です。

教訓。
「オンラインマニュアルはちゃんと確認しましょう」
特にPHPの場合、新しい言語で仕様変更も激しいので、出版物では追いつかないこともあります。

投稿者 Utayume : 2004年03月17日 21:39| 05 Work(Perl, PHP, etc)

AD

ベルメゾンネット ニッセン セシール ムトウ IMAGEnet DHCオンラインショップ 白鳩/京都発インナーショップ

トラックバック

このエントリーのトラックバックURL:
http://ondes-martenot.info/MT/mt-tb.cgi/24

AD

Mac ソフトのことなら act2.com デル株式会社 ioPLAZA【アイ・オー・データ直販サイト】 Just MyShop(ジャストシステム)