2008年6月23日
問. 配列を+(プラス)演算子で加算すると?
さて問題です。次のようなPHPスクリプトがあります。
<?php
$fruit1 = array('apple', 'banana', 'cherry');
$fruit2 = array('kiwi', 'lemon', 'melon');
$fruit = $fruit1 + $fruit2;
?>
$fruitの値は次のA~Cのどれになるでしょうか?
A. array('apple', 'banana', 'cherry')
B. array('apple', 'banana', 'cherry', 'kiwi', 'lemon', 'melon')
C. array('kiwi', 'lemon', 'melon')
では、早速試してみましょう!
<?php
$fruit1 = array('apple', 'banana', 'cherry');
$fruit2 = array('kiwi', 'lemon', 'melon');
print_r($fruit1 + $fruit2);
?>
Array
(
[0] => apple
[1] => banana
[2] => cherry
)
という わけで、正解は「A」です!
如何だったでしょうか。皆さんの思っていた通りの結果になりましたでしょうか?
ちなみに、私はてっきり「B」になるものと思ってました……。なお、
$fruit = array_merge($fruit1, $fruit2);
であれば「B」になります。
ググってみたら、以前のPHPプロ!のTIPSでも「配列の + (プラス) 演算子」として取り上げられてますね...orz
個人的にはあまり直感的な動きではないように思えるので、他の言語ではどうなんだろうと、ちょっと試してみました。
Python
fruit1 = ['apple', 'banana', 'cherry']
fruit2 = ['kiwi', 'lemon', 'melon']
print fruit1 + fruit2
['apple', 'banana', 'cherry', 'kiwi', 'lemon', 'melon']
Ruby
fruit1 = ["apple", "banana", "cherry"]
fruit2 = ["kiwi", "lemon", "melon"]
p fruit1 + fruit2
["apple", "banana", "cherry", "kiwi", "lemon", "melon"]
んー、PHPだけ違いますね。
なぜPHPではこういった実装になっているのかはわからないのですが、array_merge()よりも+演算子の動作のほうが便利な場合もありますので、動作の違いをきちんと把握して使いこなしたいところですね。
このように言語によって実装が異なりますので、配列の結合を「+」演算子で行う際はみなさんもご注意くださいませ。