PHP - よく使う関数 - 配列

 クラウディア
1. 概要
2. 配列数
3. キーの有無
4. array_diff 差分を取得
5. array_push 末尾へ要素の追加
6. list 複数の変数への代入
7. range 正数の配列を作成
8. shuffle シャッフル
9. array_merge 結合
10. count 数をかぞえる

1. 概要

 配列の関数の詳細は「PHP マニュアル - 関数リファレンス - 変数・データ型関連 - 配列」をご参照ください。

2. 配列数

 配列の数を数えるには

int count ( mixed $array_or_countable [, int $mode = COUNT_NORMAL ] );
 を使用します。

<?php
$array = array('foo', 'bar');
print('count($array)=['.count($array)."]\n");
 これを実行すると以下の結果が得られます。

count($array)=[2]

3. キーの有無

 キーの有無は、「isset()」もしくは「array_key_exists()」を使用して判断します。

bool isset ( mixed $var [, mixed $... ] )

bool array_key_exists ( mixed $key , array $array )
 「isset」と「array_key_exists」の違いは、「null」値を持つキーを「true」とみなすか「false」とみなすかだそうで。  「isset」では、「null」値を持つキーは、「false」となります。

<?php
$array = array('foo' => null, 'bar' => 'hogehoge');

print('isset($array["foo"])=['.isset($array["foo"])."]\n");
print('isset($array["bar"])=['.isset($array["bar"])."]\n");

print("\n");
print('array_key_exists("foo", $array) = ['.array_key_exists("foo", $array)."]\n");
print('array_key_exists("bar", $array) = ['.array_key_exists("bar", $array)."]\n");
 これを実行すると以下の結果が得られます。

isset($array["foo"])=[]
isset($array["bar"])=[1]

array_key_exists("foo", $array) = [1]
array_key_exists("bar", $array) = [1]

4. array_diff 差分を取得

 実は「composer」を使って追加したライブラリでどういうクラスが使えるのかを知りたかったのですが・・・。 追而書

5. array_push 末尾へ要素の追加

 array_push を使用して、配列の末尾に要素を追加することができます。

int array_push ( array &$array [, mixed $... ] )
 ただし、要素をひとつだけ加えるならばオーバヘッドのないぶん、以下の構文を用いるほうがよいようです。

$array[] = 要素;

6. list 複数の変数への代入

 「list」を使用すると配列の要素を一度で複数の変数へ代入することができます。

array list ( mixed $var1 [, mixed $... ] )

<?php
$array = array
		(
			array(1, 2, 3),
			array(4, 5, 6),
		);

for ($i=0; $i<count($array); $i++)
{
	list($one, $two, $three) = $array[$i];

	print("$one ,$two, $three\n");
}
 を実行すると以下の結果が得られます。

1 ,2, 3
4 ,5, 6

7. range 正数の配列を作成

 マニュアルによれば、正確には「ある範囲の整数を有する配列を作成する」ということです。

range ( mixed $start , mixed $end [, number $step = 1 ] ) : array

<?php
$array1 = range(1, 5);

foreach ($array1 as $number)
{
	print("  $number");
}

print("\n");

$array2 = range(-4, 7, 2);

foreach ($array2 as $number)
{
	print("  $number");
}
 というソースを書いて、実行すると以下の結果が得られます。

1  2  3  4  5
-4  -2  0  2  4  6

8. shuffle シャッフル

 これは、正にシャッフル。  べたな、C言語を使っていると、「rand」関数あたりを使って、ちょっと面倒な関数を作らなければならなかったりしますが・・・。  需要があるんでしょうな。  正にシャッフルできるような関数が用意されているようです。

shuffle ( array &$array ) : bool
 戻り値として、成功時は「TRUE」、失敗時は「FALSE」が返ります。

<?php
$array = range(1, 5);

print("1 回目\n");

shuffle($array);

foreach ($array as $number)
{
	print("  $number");
}

print("\n2 回目\n");

shuffle($array);

foreach ($array as $number)
{
	print("  $number");
}
 というソースを書いて、実行すると以下の結果が得られます(もちろん結果は、実行するたびにばらばらになります)。
1 回目
  1  4  5  2  3
2 回目
  4  1  3  5  2

9. array_merge 結合

 本項は、「【PHP】配列おさらい〜結合編 - Qiita」を参考にさせていただきました。

<?php
$array1 = array('1', '2');
$array2 = array('a', 'b');

$result = array_merge($array1, $array2);
print_r($result);
 というソースを書いて、実行すると以下の結果が得られます。

Array
(
    [0] => 1
    [1] => 2
    [2] => a
    [3] => b
)
 型の違う、配列同士を結合させることもできるようです。  今んとこ、結合する順番に並ぶようです。

10. count 数をかぞえる


count(Countable|array $value, int $mode = COUNT_NORMAL): int
 配列に限らず、カウンタブルな、第一引数の要素、あるいはオブジェクトに含まれる何かの数を数えて、返します。  第二引数、うまく説明できないので、警告も合わせて、ドキュメントの内容をまんま書いておきますね。
オプションのmode 引数が COUNT_RECURSIVE (または 1) にセットされた場合、count() は再帰的に配列をカウントします。 これは多次元配列の全ての要素をカウントするといった場合に特に有効です。

警告
count() は、再帰を検出して無限ループを回避するようになっています。 しかしその場合 (配列の中に自分自身が複数回登場する場合) は毎回 E_WARNING を発行し、期待する結果より大きい数を返します。
 まぁ、これは、例題を書くまでもありますまい。
ハイスピードプラン
メンズミレット