Asial Blog

Recruit! Asialで一緒に働きませんか?

問. 配列を+(プラス)演算子で加算すると?

カテゴリ :
バックエンド(プログラミング)
タグ :
Tech
PHP
Python
Ruby
さて問題です。次のようなPHPスクリプトがあります。

  1. <?php
  2. $fruit1 = array('apple', 'banana', 'cherry');
  3. $fruit2 = array('kiwi', 'lemon', 'melon');
  4.  
  5. $fruit = $fruit1 + $fruit2;
  6. ?>

$fruitの値は次のA~Cのどれになるでしょうか?

  1. A. array('apple', 'banana', 'cherry')
  2. B. array('apple', 'banana', 'cherry', 'kiwi', 'lemon', 'melon')
  3. C. array('kiwi', 'lemon', 'melon')

では、早速試してみましょう!

  1. <?php
  2. $fruit1 = array('apple', 'banana', 'cherry');
  3. $fruit2 = array('kiwi', 'lemon', 'melon');
  4.  
  5. print_r($fruit1 + $fruit2);
  6. ?>

  1. Array
  2. (
  3.     [0] => apple
  4.     [1] => banana
  5.     [2] => cherry
  6. )

というわけで、正解は「A」です!

如何だったでしょうか。皆さんの思っていた通りの結果になりましたでしょうか?

ちなみに、私はてっきり「B」になるものと思ってました……。なお、

  1. $fruit = array_merge($fruit1, $fruit2);

であれば「B」になります。

ググってみたら、以前のPHPプロ!のTIPSでも「配列の + (プラス) 演算子」として取り上げられてますね...orz

個人的にはあまり直感的な動きではないように思えるので、他の言語ではどうなんだろうと、ちょっと試してみました。

Python
  1. fruit1 = ['apple', 'banana', 'cherry']
  2. fruit2 = ['kiwi', 'lemon', 'melon']
  3. print fruit1 + fruit2

  1. ['apple', 'banana', 'cherry', 'kiwi', 'lemon', 'melon']

Ruby
  1. fruit1 = ["apple", "banana", "cherry"]
  2. fruit2 = ["kiwi", "lemon", "melon"]
  3. p fruit1 + fruit2

  1. ["apple", "banana", "cherry", "kiwi", "lemon", "melon"]

んー、PHPだけ違いますね。

なぜPHPではこういった実装になっているのかはわからないのですが、array_merge()よりも+演算子の動作のほうが便利な場合もありますので、動作の違いをきちんと把握して使いこなしたいところですね。

このように言語によって実装が異なりますので、配列の結合を「+」演算子で行う際はみなさんもご注意くださいませ。