php配列のその特異な特徴とその使い方

よくphpが変な言語だ!と言われるのですが、

私自身その特殊性に気づくことはありませんでした。ですが、他言語を触っていくうちに

「あれ、phpってなんか変だな?」と考えるようになりました。

そのうちの一つの理由が、この配列です。 

どのように変わっているのかを実際に見てましょう!

配列の作り方/初期化

まず配列の作り方を学んでいきましょう。

phpにおいて、配列は、array()で定義することができます。

<?php
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

上記でも作成することはできますが、

実際には下記の変数を作って入れていく方法で
作成していく方がよく使われます。

*初めて使われる変数に対して、からのブラケットが使われた場合、
その変数は配列として初期化されます。

<?php
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

数字配列をつくってみよう

さて、それでは、数字を配列に入れて作ってみましょう。

$array =  0,1,2,3,4. ;

まずは0から4まで配列に入れます。

この、配列の中を出すと下記の通りになります。

var_bump($array) ;

array(4) {
  [0]=>
  int(0) 
  [1]=>
  int(3) 
  [2]=>
  string(5) "hello"
  [3]=>
  string(5) "world"
}

予想通りの結果ですね!

数字のキーに対して、数字のバリューが入っています。

添字配列の場合

文字列をキーにして、値を入れる場合です。

実際の例は添字配列は下記のように作られます。

これはわかりますね。

また、そこまで理解をすることとして難しいことではないですよね。

数値配列と添字配列を混合できる!?

ここからがphp独自の配列になってきます。

数値だけの配列に添字配列を混ぜることができるのです。
実際の例を見てみましょう。

$ mixArray = [1, 2, 'fruits' => 'apple', 4];
var_ dump( $ mixArray);
[
  [0]  => 1 
  [1]=> 2 
  [" fruits"] => "apple" 
  [2] => 4
];

他の言語では、連想配列をハッシュやマップ、辞書などと呼び配列と

別の扱いになっています。そりゃ全く違うものですから、そうですよね。。

ですが、

phpでは全てが連想配列という扱いとなります。

phpでは全てが連想配列という扱いとなります。

phpでは全てが連想配列という扱いとなります。

大事なことなので、3回言いました。

これはどういうことかと言いますと、
配列で一つの型を決めるのが言語の特性上できないということなのです。

この点は、多言語を勉強している人からすると全く理解できないですよね・・

実際の業務では、混ぜて使うことはほとんどありません。混乱トラブルの元です。

なので、入らないようなバリデーションをしっかり書ける実装を心がける必要があります。

配列の結合方法

さてここでは少し話を変えまして、phpの配列結合を見ていきましょう。

phpの配列の結合に、+で結合する方法とarraymerge 2つの結合方法があります。

*arraymergerecursive()もありますが、ここでは紹介しません。

この2つは結合という動作は同じですが、その結合の仕方、結果には違いがあります。

では実際に見てみましょう。

対象のデータは下記を使用します。

<?php
// 対象データ
$a = array(
    0 => ‘apple’,
   1 => ‘orange’,
    2 => ‘grape’,
   3 => ‘banana’,
);
 
$b = array(
    1 => ‘carrot’,
	2 => ‘radish”,
  5 => ‘pumpkin'
);

+結合の場合は、

$new = $a + $b;
array(
 0=> ‘apple’,
 1 => ‘orange’,
2 => ‘grape’,
3 => ‘banana’,
 5 => ‘pumpkin'
);

$aにない要素は、追加されて、$aと$bで同じ場合は$aが優先されます。

あとから追加した$bは全ての要素が反映されてない点に注意して下さい。

array-mergeの場合、後から追加された要素も配列に反映されます。番号がダブった場合は、先の引数の配列を優先して、後の引数の配列は、番号を変更して追加されます。

arraymergeの方が、順番に足されていくという人間の感覚に近く使いやすいです。

$new = array_merge($a ,$b);
array(
 0=> ‘apple’,
 1 => ‘orange’,
 2 => ‘grape’,

 3 => ‘banana’,
 4 => ‘carrot’,
 5 => ‘’radish,
 
 6 => ‘pumpkin'
);

まとめ

本日はphpにおける配列を学びました。

混合するphpの特徴的な配列の理解はできましたか。他言語では違うぞ!ということは今のうちにしっかり理解しておいてくださいね。

コメントを残す