Arr クラス

Arr クラスは、配列を扱うヘルパー関数を集めたものです。

is_multi($arr, $all_keys = false)

is_multi メソッドは、与えられた配列が多次元配列であるかチェックします。

静的 はい
パラメータ
パラメータ デフォルト 説明
$arr 必須 チェックする配列。
$all_keys
false
trueの場合は全ての要素が多次元配列かをチェックします。
返り値 bool
// Single array
$arr = array('one' => 1, 'two' => 2);
echo Arr::is_multi($arr);
// 実行結果: false

// 多次元配列
$arr = array('one' => array('test' => 1), 'two' => array('test' => 2), 'three' => array('test' => 3));
echo Arr::is_multi($arr);
// 実行結果: true

// 多次元配列で全ての要素をチェック
$arr = array('one' => array('test' => 1), 'two' => array('test' => 2), 'three' => 3);

echo Arr::is_multi($arr, false); // 実行結果: true
echo Arr::is_multi($arr, true);  // 実行結果: false

is_assoc($arr)

is_assoc メソッドは、与えられた配列が連想配列であるかチェックします。

静的 はい
パラメータ
パラメータ デフォルト 説明
$arr 必須 チェックする配列。
返り値 bool
$arr = array('foo', 'bar', 'baz', 'yay');
echo Arr::is_assoc($arr);
// 実行結果: false

$arr = array('foo' => 'foo', 'bar' => 'bar', 'baz' => 'baz', 'yay' => 'yay');
echo Arr::is_assoc($arr);
// 実行結果: true

/*
 * たとえもし '2' が string で定義されていたとしても、PHPは内部的に integer として保管するため、
 * 連想配列とは認識されません!
 */
$arr = array(0 => 'foo', 1 => 'bar', '2' => 'baz', 3 => 'yay');
echo Arr::is_assoc($arr);
// 実行結果: false!

to_assoc($arr)

to_assoc メソッドは連想配列でない配列を連想配列に変換します。もし元の配列に数値が入っていたとしても変換します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$arr 必須 変換する配列。
返り値 array|null
例外 BadMethodCallException 引数の配列の要素数が 奇数のとき
$arr = array('foo', 'bar', 'baz', 'yay');
print_r(Arr::to_assoc($arr));

// 実行結果:
Array
(
    ["foo"] => 'bar'
    ["baz"] => 'yay'
)

$arr = array('foo', 'bar', 'baz');
echo Arr::to_assoc($arr);
// 実行結果: null

assoc_to_keyval($assoc = null, $key_field = null, $val_field = null)

assoc_to_keyval メソッドは多次元配列を key=>val の配列に変換します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$assoc 必須 変換する配列。
$key_field 必須 key となる連想配列の添字。
$val_field 必須 value となる連想配列の添字。
返り値 array
例外 InvalidArgumentException 1番目の引数が配列でないか、 Iterator インターフェイスを実装していないとき。
$people = array(
	array(
		"name" => "Jack",
		"age" => 21
	),
	array(
		"name" => "Jill",
		"age" => 23
	)
);

print_r(Arr::assoc_to_keyval($people, 'name', 'age'));

// 実行結果:
Array
(
	["Jack"] => 21
	["Jill"] => 23
)

average($array = null)

average メソッドは全ての配列の値から平均値を求めて返します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 平均値を求める配列。
返り値 array
echo Arr::average(array('1', 2, 4, '8'));
// 実行結果: 3.75

flatten($array, $glue = ':', $reset = true)

flatten メソッドは、多次元配列(連想配列と数値インデックス両方とも)を1次元配列に変換します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 変換する配列
$glue
:
複数のキーを連結するための文字列
$reset
true
flatten が内部で保持している配列に値を追加していく代わりに、新しく配列を作って値を格納します。
返り値 array
$indexed = array(
	array("a"),
	array("b"),
	array("c"),
);

print_r(Arr::flatten($indexed, '_'));

// 実行結果:
Array
(
	[0_0] => a
	[0_1] => b
	[0_2] => c
)

flatten_assoc($array, $glue = ':', $reset = true)

flatten_assoc メソッドは、多次元連想配列を1次元の連想配列に落とし込みます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 変換する配列。
$glue
:
キーをまとめて一つにするために使われる文字列
$reset
true
flatten_assoc が内部で保持している配列に値を追加していく代わりに、新しく配列を作って値を格納します。
返り値 array
$people = array(
	array(
		"name" => "Jack",
		"age"  => 21
	),
	array(
		"name" => "Jill",
		"age"  => 23
	)
);

print_r(Arr::flatten_assoc($people));

// 実行結果:
Array
(
	[0:name] => Jack
	[0:age]  => 21
	[1:name] => Jill
	[1:age]  => 23
)

// 別の配列を先頭にして変換してみましょう
print_r(Arr::flatten_assoc(array(array("name" => "Humpty", "age" => 11)), ":", false));

// 実行結果:
Array
(
	[0:name] => Humpty
	[0:age]  => 11
	[1:name] => Jill
	[1:age]  => 23
)

reverse_flatten($array, $glue = ':')

reverse_flatten

メソッドは、flattenによってまとめられた1次元配列を元の多次元配列(連想配列含む)に戻します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 戻す1次元配列。
$glue
:
キーを合成するために使われた文字
返り値 array
$flattened = array(
	'0_name' => 'James',
	'0_age'  => 24,
	'1_name' => 'John',
	'1_age'  => 34,
);

print_r(Arr::reverse_flatten($flattened, '_'));

// 実行結果:
Array
(
	[0] => Array
		(
			[name] => James
			[age]  => 24
		)

	[1] => Array
		(
			[name] => John
			[age]  => 34
		)
)

filter_prefixed($array, $prefix, $remove_prefix = true)

filter_prefixed メソッドはプレフィックスによって配列をフィルターします。設定されたプレフィックスから始まるキーを持つ値のみの配列を返します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 フィルターする配列。
$prefix 必須 フィルターのためのプレフィックス文字列。
$remove_prefix
true
配列のキーからプレフィックスを取り除くかどうか。
返り値 array
$arr = array(
	"user_name" => "John",
	"user_surname" => "Lastname",
	"project_name" => "Fuel",
	"project_type" => "Framework",
);

print_r(Arr::filter_prefixed($arr, "user_"));

// 実行結果:
Array
(
	[name] => John
	[surname] => Lastname
)

// プレフィックスをそのまま保持しましょう
print_r(Arr::filter_prefixed($arr, "project_", false);

// 実行結果:
Array
(
	[project_name] => Fuel
	[project_type] => Framework
)

remove_prefixed($array, $prefix)

remove_prefixed メソッドは、与えられたプレフィックスにマッチするキーを持つ値を配列から取り除きます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 値が取り除く配列。
$prefix 必須 フィルターに使うプレフィックスr文字列。
返り値 array
$arr = array(
	"user_name" => "John",
	"user_surname" => "Lastname",
	"project_name" => "Fuel",
	"project_type" => "Framework",
);

print_r(Arr::remove_prefixed($arr, "project"));

// 実行結果:
Array
(
	[user_name] => John
	[user_surname] => Lastname
)

filter_suffixed($array, $suffix, $remove_suffix = true)

filter_suffixed メソッドはサフィックスで配列をフィルターします。与えられたサフィックス文字列で終わるキーを持つ配列を返します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 フィルターする配列。
$suffix 必須 フィルターに使用する文字列
$remove_suffix
true
配列のキーからサフィックスを取り除くかどうか。
返り値 array
$arr = array(
    "name_1" => "John",
    "surname_1" => "Lastname",
    "name_2" => "Ted",
    "surname_2" => "Surname",
);

print_r(Arr::filter_suffixed($arr, "_1"));

// 実行結果:
Array
(
    [name] => John
    [surname] => Lastname
)

// サフィックスを保持したままにしてみましょう
print_r(Arr::filter_suffixed($arr, "_1", false);

// 実行結果:
Array
(
    [name_1] => John
    [surname_1] => Lastname
)
                            

remove_suffixed($array, $suffix)

remove_suffixed メソッドは配列から与えられたサフィックスで終了するキーを持つ値を削除します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 値を取り除く配列。
$suffix 必須 フィルターに使うサフィックス文字列。
返り値 array
$arr = array(
    "name_1" => "John",
    "surname_1" => "Lastname",
    "name_2" => "Ted",
    "surname_2" => "Bear",
);

print_r(Arr::remove_suffixed($arr, "_1"));

// 実行結果:
Array
(
    [name_2] => Ted
    [surname_2] => Surname
)
                            

filter_keys($array, $keys, $remove = false)

filter_keys メソッドは、与えられた配列に含まれた複数のキーで配列をフィルターします。$keys に含まれるキーを持つ値のみの配列を返します。また $keys によって元の配列の値を削除することもできます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 フィルターする配列。
$keys 必須 配列をフィルターするためのキーを持つ配列。
$remove
false
もし true ならば、フィルターされた配列を新しく作る代わりに、 $array から直接 $keys に含まれるキーを削除します。
返り値 array
$arr = array(
	"user_name" => "John",
	"user_surname" => "Lastname",
	"project_name" => "Fuel",
	"project_type" => "Framework",
);

print_r(Arr::filter_keys($arr, array('project_name', 'user_name')));

// 実行結果:
Array
(
	[project_name] => Fuel
	[user_name] => John
)

// いくつかのキーを削除してみましょう
print_r(Arr::filter_keys($arr, array('user_name', 'user_surname'), true));

// 実行結果:
Array
(
	[project_name] => Fuel
	[project_type] => Framework
)

filter_recursive($array, $callback = null)

filter_recursive メソッドは、PHP の array_filter() 関数の再帰バージョンです。array_filter() と同様に、フィルターするかどうかを決めるコールバック関数を渡すことができます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 フィルターする配列。
$callback
null
ブール値を返すコールバック関数
返り値 array
$arr = array(
	"user_name" => "John",
	"user_surname" => "Lastname",
	"info" => array(
		0 => array(
			"data" = "a value",
		),
		1 => array(
			"data" = "",
		),
		2 => array(
			"data" = 0,
		),
	),
);

print_r(Arr::filter_recursive($arr));

// 実行結果:
Array
(
	[project_name] => Fuel
	[user_name] => John
	[info] => Array
	(
		[0] => Array
		(
			[data] => a value
		)
	)
)

// コールバック関数を指定してみましょう
print_r(Arr::filter_recursive($arr, function($item){ return $item !== ""; });

// 実行結果:
Array
(
	[project_name] => Fuel
	[user_name] => John
	[info] => Array
	(
		[0] => Array
		(
			[data] => a value
		)
		[2] => Array
		(
			[data] => 0
		)
	)
)

subset($array, $keys, $default = null)

subset メソッドは、filter_keys と同様に $keys で渡された値を用いて配列にアクセスし、その結果得られた連想配列を返します。異なる点は subset が、渡されたキーがもし見つからなかった場合 $default 値を使って全ての要求されたキーが埋められることです。

このメソッドは内部的に getset を使います。 $keys はドット区切り表記を用いることができます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 フィルターする配列
$keys 必須 配列をフィルターするためのキーを持つ配列
$default
null
キーが $array 中に見つからなかった場合に代わりに用いる値
返り値 array
$arr = array(
	"user" => array(
		"name" => "John",
		"surname" => "Lastname",
	),
	"project" => array(
		"name" => "Fuel",
		"type" => "Framework",
	),
);

print_r(Arr::subset($arr, array('project.name', 'user.name')));

// 返り値:
Array
(
 	[project] => Array
         (
			 [name] => Fuel
		 )
	[user] => Array
         (
			 [name] => John
		 )
)

print_r(Arr::subset($arr, array('project.name', 'project.manager')));

// 返り値:
Array
(
 	[project] => Array
         (
			 [name] => Fuel
			 [manager] =>
		 )
)

print_r(Arr::subset($arr, array('project.name', 'project.manager', 'user', 'not_provided'), 'Not Provided'));

// 返り値:
Array
(
 	[project] => Array
         (
			 [name] => Fuel
			 [manager] => Not Provided
		 )
 	[user] => Array
         (
			 [name] => John
			 [surname] => Lastname
		 )
	[not_provided] => Not Provided
)

get($array, $key, $default = null)

get メソッドは指定された配列の要素を返します。多次元配列には、階層をドット (.) で区切ることでアクセスできます。また、初期値はセットされていません。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 アクセスする配列
$key 必須 $array 配列のキー。もし null が渡された場合は全体が配列として返されます。
$default
null
指定された要素が存在しない場合に返す値を指定します。
返り値 mixed. もし $key に配列を渡した場合は、その配列内のキーで得られた結果を各キーごとの連想配列で返します。
$person = array(
	"name" => "Jack",
	"age" => "21",
	"location" => array(
		"city" => "Pittsburgh",
		"state" => "PA",
		"country" => "US"
	)
);

echo Arr::get($person, "name", "Unknown Name");
// 実行結果: "Jack"

echo Arr::get($person, "job", "Unknown job");
// 実行結果: "Unknown job"

// This method can also dive into arrays by using a dot to separate between keys
echo Arr::get($person, "location.city", "Unknown City");
// 実行結果: "Pittsburgh"

set(&$array, $key, $value = null)

set メソッドは指定された配列に要素をセットします。多次元配列には、階層をドット (.) で区切ることでアクセスできます。

警告: 元の配列は参照によって編集されます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 アクセスする配列
$key 必須 $array 配列のキー。もし、キーが渡されなかった場合や null が渡された場合、配列は破棄されます。また、 key -> value のペアが渡された場合はすべての値が配列にセットされます。
$value
null
セットする値。 $key が配列の場合は無視されます。
返り値 void
$person = array(
	"name" => "Jack",
	"age" => "21",
	"location" => array(
		"city" => "Pittsburgh",
		"state" => "PA",
		"country" => "US"
	)
);

Arr::set($person, "name", "John");
// $person['name'] には "John" がセットされます。

// This method can also dive into arrays by using a dot to separate between keys
Arr::set($person, "location.city", "Philadelphia");
// $person['location']['city'] には "Philadelphia" がセットされます。

// また、一度に複数の値をセットすることも出来ます。
Arr::set($person, array("name" => "John", "location.city" => "Philadelphia"));

pluck($array, $key, $index = null)

pluck メソッドは、配列かオブジェクトのコレクションから値をピックアップします。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 ピックアップする配列。
$key 必須 配列からピックアップするキー。
$index
null
返り値の配列キーに入れる値をオプション指定できます
返り値 void
$collection = array(
	array(
		'id' => 2,
		'name' => 'Bill',
		'surname' => 'Cosby',
	),
	array(
		'id' => 5,
		'name' => 'Chris',
		'surname' => 'Rock',
	),
	array(
		'id' => 7,
		'name' => 'Bert',
		'surname' => 'Visser',
	),
);

// id の配列を返します
$ids = \Arr::pluck($collection, 'id');
// array(2, 5, 7);

// name の配列を返しますがそのキーは id にします
$names = \Arr::pluck($collection, 'name', 'id');
// array(2 => 'Bill', 5 => 'Chris', 7 => 'Bert');

delete(&$array, $key)

delete メソッドは指定された配列の要素を削除します。多次元配列には、階層をドット (.) で区切ることでアクセスできます。
警告: 元の配列は参照によって編集され、結果のみが返されます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 アクセスする配列
$key 必須 $array 配列のキー。もし、キーが渡されなかった場合や null が渡された場合、配列は破棄されます。
返り値 mixed, true の場合、そのキーは削除されました。 false の場合、そのキーは存在しませんでした。もし、あなたがキーの配列を渡した場合、戻り値は要求された全ての削除結果を持つ配列になります。
$person = array(
	"name" => "Jack",
	"age" => "21",
	"location" => array(
		"city" => "Pittsburgh",
		"state" => "PA",
		"country" => "US"
	)
);

$result = Arr::delete($person, "name");
// $person['name'] は配列から削除され、 true が返されます。

// このメソッドは、キーの間に ドット (.) を入れることで、より深い配列に潜ることができます。
$result = Arr::delete($person, "location.city");
// $person['location']['city'] は配列から削除され、 true が返されます。

// また、一度に複数の値を削除する事もできます。
$result = Arr::delete($person, array("name", "location.doesnotexist"));
// $person['name'] は削除され、 array('name' => true, 'location.doesnotexist' => false) が返されます。

insert(Array &$original, $value, $pos)

insert メソッドは、主にはエラーチェック付きの array_splice() 関数です。
警告: 元の配列は参照渡しされるので直接書き換えられます。成功かどうかを表すブール値のみが返ります。

静的 はい
パラメータ
パラメータ デフォルト 説明
$original 必須 変更する配列
$value 必須 挿入する値
$pos 必須 挿入するオフセットを表す数値。マイナス値の場合は配列の末尾から数えた位置となります。
返り値 boolean
$people = array("Jack", "Jill");

// 値をひとつ追加
Arr::insert($people, "Humpty", 0);
print_r($people);
// 実行結果:
Array
(
	[0] => Humpty
	[1] => Jack
	[2] => Jill
)

// 複数の値を追加
Arr::insert($people, array("Hansel", "Gretel"), 1);
print_r($people);
// 実行結果:
Array
(
	[0] => Humpty
	[1] => Hansel
	[2] => Gretel
	[3] => Jack
	[4] => Jill
)

// 配列をひとつ追加
Arr::insert($people, array( array("name" => "Wolf", "teeth" => "sharp")), 0);
print_r($people);

// 実行結果:
Array
(
	[0] => Array
		(
			[name] => Wolf
			[teeth] => sharp
		)

	[1] => Humpty
	[2] => Hansel
	[3] => Gretel
	[4] => Jack
	[5] => Jill
)

insert_assoc(array &$original, array $values, $pos)

insert_assoc メソッドは連想配列の特定の場所に要素を追加します。
警告: 元の配列は参照渡しされるので直接書き換えられます。成功したかどうかを表すブール値のみが返ります。

静的 はい
パラメータ
パラメータ Default 説明
$original 必須 変更する連想配列
$values 必須 挿入する連想配列
$pos 必須 配列を新たに挿入する位置。 負の値の場合は配列の最後尾より数えた場所に挿入されます。
返り値 boolean。成功の場合は true、$pos が無効な位置の場合は false
$people = array("name" => "Jack", "surname" => "Reacher");

Arr::insert_assoc($people, array("initial" => "P.", 1);
print_r($people);

// 結果:
Array
(
	[name] => Jack
	[initial] => P.
	[surname] => Reacher
)

insert_before_key(Array &$original, $value, $key)

The insert_before_key メソッドは与えられたキーの手前に要素を1つ追加します。
WARNING: 元の配列は参照渡しされるので直接書き換えられます。成功かどうかを表すブール値のみが返ります。

静的 はい
パラメータ
パラメータ デフォルト 説明
$original 必須 変更する配列。
$value 必須 挿入する値
$key 必須 このキーの手前に挿入されます。
返り値 boolean
$people = array("Jack", "Jill");

Arr::insert_before_key($people, "Humpty", 1);
print_r($people);

// 実行結果:
Array
(
	[0] => Jack
	[1] => Humpty
	[2] => Jill
)

insert_after_key(Array &$original, $value, $key, $is_assoc = false)

insert_after_key メソッドは与えられたキーの直後に値を1つ追加します。
警告: 元の配列は参照渡しされるので直接書き換えられます。成功かどうかを表すブール値のみが返ります。

静的 はい
パラメータ
パラメータ デフォルト 説明
$original 必須 変更する配列
$value 必須 挿入する値
$key 必須 このキーの直後に挿入されます。
$is_assoc
false
$value が連想配列かどうか。
返り値 boolean
$people = array("Jack", "Jill");

Arr::insert_after_key($people, "Humpty", 1);
print_r($people);

// 実行結果:
Array
(
	[0] => Jack
	[1] => Jill
	[2] => Humpty
)

insert_after_value(Array &$original, $value, $search, $is_assoc = false)

insert_after_value メソッドは与えられた値の直後に要素を1つ追加します。
警告: 元の配列は参照渡しされるので直接書き換えられます。成功かどうかを表すブール値のみが返ります。

静的 はい
パラメータ
パラメータ デフォルト 説明
$original 必須 変更する配列
$value 必須 挿入する値
$search 必須 この値を持つ要素の直後に挿入されます
$is_assoc
false
値が連想配列かどうか
返り値 boolean
$people = array("Jack", "Jill");

Arr::insert_after_value($people, "Humpty", "Jack");
print_r($people);

// 実行結果:
Array
(
	[0] => Jack
	[1] => Humpty
	[2] => Jill
)

sort($array, $key, $order = 'asc', $sort_flags = SORT_REGULAR)

sort メソッドは多次元配列を値によってソートします。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 ソートする配列。
$key 必須 $array どのキーの値をソートに使用するか。
$order
'asc'
ソート順 (asc か desc)。
$sort_flags
SORT_REGULAR
PHP のソート型のフラグ。 (http://php.net/manual/ja/function.sort.php)
返り値 mixed
$data = array(
	array(
		'info' => array(
			'pet' => array(
				'type' => 'dog'
			)
		),
	),
	array(
		'info' => array(
			'pet' => array(
				'type' => 'fish'
			)
		),
	),
	array(
		'info' => array(
			'pet' => array(
				'type' => 'cat'
			)
		),
	),
);

$data = Arr::sort($data, 'info.pet.type');
// 実行結果:
array(
	array(
		'info' => array(
			'pet' => array(
				'type' => 'cat'
			)
		),
	),
	array(
		'info' => array(
			'pet' => array(
				'type' => 'dog'
			)
		),
	),
	array(
		'info' => array(
			'pet' => array(
				'type' => 'fish'
			)
		),
	),
);

multisort($array, $conditions, $ignore_case = false)

multisort メソッドは多次元配列を複数の値でソートします。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 ソートする配列
$conditions 必須 ソート条件を表す配列
$ornire_case
false
大文字/小文字を区別するかどうか。
返り値 array
$collection = array(
	'i5' => array(
		'name' => 'Carl',
		'age' => 17,
		'points' => 30,
		'arr' => array(
			'key' => 10,
		),
	),
	'i7' => array(
		'name' => 'carl',
		'age' => 17,
		'points' => 20,
		'arr' => array(
			'key' => 10,
		),
	),
	'i2' => array(
		'name' => 'Bert',
		'age' => 20,
		'points' => 30,
		'arr' => array(
			'key' => 10,
		),
	),
);

$collection = \Arr::multisort($collection, array(
	'name' => SORT_ASC,
	'points' => array(SORT_ASC, SORT_NUMERIC),
	'age' => array(SORT_ASC, SORT_NUMERIC),
), true);
print_r($collection);

// 実行結果:
Array
(
    [i2] => Array
        (
            [name] => Bert
            [age] => 20
            [points] => 30
            [arr] => Array
                (
                    [key] => 10
                )

        )

    [i7] => Array
        (
            [name] => carl
            [age] => 17
            [points] => 20
            [arr] => Array
                (
                    [key] => 10
                )

        )

    [i5] => Array
        (
            [name] => Carl
            [age] => 17
            [points] => 30
            [arr] => Array
                (
                    [key] => 10
                )

        )
)

in_array_recursive($needle, $haystack, $strict = false)

in_array_recursive メソッドは値が配列に含まれているかどうか再帰的にチェックします。

静的 はい
パラメータ
パラメータ デフォルト 説明
$needle 必須 配列の中から探す値。
$haystack 必須 検索する配列。
$strict
false
値の比較に == を用いるか === を用いるか。
返り値 bool
$arr = array('one' => 1, 2, 3, array(56), 87);

echo Arr::in_array_recursive('56', $arr);
// 実行結果: true

echo Arr::in_array_recursive('87', $arr, true);
// 実行結果: false

echo Arr::in_array_recursive(87, $arr, true);
// 実行結果: true

merge($array)

merge メソッドは 2 つの配列を再帰的にマージしますが、array_merge_recursive() とは 2 つの重要な点が異なります。
- 2つの異なる値が両者とも配列でない場合は、 マージされる変わりに前者の値は後者の値で上書きされます。
- 競合していない数字のキーは変更されません、 数字キーがすでに存在する場合のみ array_push() を使用して値が追加されます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array array 必須 可変個の引数で配列を渡せるが、すべての型は配列でなければならない。
返り値 array
例外 渡された引数のどれかが配列ではなかった場合 InvalidArgumentException が投げられる。
$arr1 = array(
	'one' => 1,
	2,
	3,
	array(
		56
		),
	87
);

$arr2 = array(
	27,
	90,
	array(
		'give_me' => 'bandwidth'
		),
	'90',
	'php',
);

print_r( Arr::merge($arr1, $arr2) );
// 実行結果:
Array
(
	[one] => 1
	[0] => 2
	[1] => 3
	[2] => Array (
			[0] => 56
				)
	[3] => 87
	[4] => 27
	[5] => 90
	[6] => Array (
			[give_me] => bandwidth
				)
	[7] => 90
	[8] => php
)

merge_assoc($array, ...)

merge_assoc メソッドは2個以上の配列を再帰的にマージします。ただし array_merge_recursive() とは2つの重要な点が異なります。
- それぞれの配列に同じキーで異なる値が含まれていた場合は、 新たな配列を作ってマージすることはせずに、単純に後者が前者を上書きします。
- 数字のキーは変更されません

静的 はい
パラメータ
パラメータ デフォルト 説明
$array array 必須 複数の値はすべて配列でなければなりません
返り値 array
例外 InvalidArgumentException 引数のどれかが配列ではない。
$arr1 = array(
	'one' => 1,
	2 => 2,
	3 => 3,
	4 => array(
		56
	),
	5=> 87
);

$arr2 = array(
	1 => 27,
	2 => 90,
	4 => array(
		'give_me' => 'bandwidth'
	),
	6 => '90',
	7 => 'php',
);

print_r( Arr::merge_assoc($arr1, $arr2) );
// 実行結果:
Array
(
	[one] => 1
	[2] => 90
	[3] => 3
	[4] => Array (
		[0] => 56
		[give_me] => bandwidth
	)
	[5] => 87
	[1] => 27
	[6] => 90
	[7] => php
)

search メソッドは、与えられた値によって配列を検索し、対応するキーまたはデフォルト値を返します。
- $recursive が true の場合は、区切り文字として $delimiter を使った合成キーを用います。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array array 必須 検索される配列
$value mixed 必須 検索する値
$default string
null
もし値が存在しなかった場合に返されるデフォルト値
$recursive boolean
true
再帰的に取得するかどうか
$delimiter string
'.'
$recursive が true の場合の区切り文字
返り値 int|string|null
例外 InvalidArgumentException 第1引数が配列ではない。
InvalidArgumentException $default 引数が文字、int、nullのいずれでもない。
InvalidArgumentException $delimiter 引数が文字列ではない。
$arr = array(
	'one' => 1,
	'two' => 2,
	'three' => array(
		'a' => 4,
		'b' => 'foo'
	),
	'four',
	array(
			null,
			array(
				null,
				null,
				null,
				array(
					'deep'
				)
			)
		),
	);
);

echo Arr::search($arr, 1);
// one

echo Arr::search($arr, 'four');
// 0

var_dump(Arr::search($arr, 5));
// NULL

echo Arr::search($arr, 4, null, true);
// three.a

echo Arr::search($arr, 'deep', null, true);
// 1.1.3.0

unique($array)

unique メソッドは、与えられた配列に含まれるすべての一意な値を返します。 最初に見つかった値は保持され、重複したものは破棄されます。その場合のキーはそのまま残りす。 このメソッドは array_unique() のように動作しますが、まず第一に配列をソートすることはしませんし、 配列中のオブジェクトやクロージャを取り除くこともしません。

パラメータ
パラメータ デフォルト 説明
$array array 必須 重複を取り除く配列
返り値 array
$array = array(
	'val1' => 'test', 'val2' => 'test', 'val1' => 'dup',
);

// 実行結果: array('val1' => 'test', 'val2' => 'test')
$result = Arr::unique($array);

sum($array, $key)

sum メソッドは $key によって指定された値の合計値を計算します。

静的 はい
パラメータ
パラメータ タイプ デフォルト 説明
$array array 必須 値を保持している配列
$key string 必須 合算する値を取得するキー
返り値 int
例外 InvalidArgumentException 第一引数が配列ではなかった場合。
$collection = array(
	array(
		'age' => 20,
		'name' => 'Bill',
		'scores' => array(
			'math' => 10,
		),
	),
	array(
		'age' => 25,
		'name' => 'Chris',
		'scores' => array(
			'math' => 15,
		),
	),
	array(
		'age' => 38,
		'name' => 'Bert',
		'scores' => array(
			'math' => 5,
		),
	),
);

// 配列中の age の値を合計値を計算する
$total_age = Arr::sum($collection, 'age'); // 83

// 配列中の 'scores.math' の合計値を計算する
$total_score = Arr::sum($collection, 'scores.math'); // 30

reindex($array)

reindex メソッドは、配列内の整数キーの数値の振り直しを再帰的に行います。文字列キーには何も行いません。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array array 必須 再インデックスする配列
返り値 array
$array = array(
	2 => 2,
	'three' => 3,
	5 => array(
		2 => 2,
		'three' => 3,
		5 => 5
	),
	7 => 7
);

// 配列を再インデックスします
print_r( Arr::reindex($array) );
// 実行結果:
Array
(
    [0] => 2
    [three] => 3
    [1] => Array
        (
            [0] => 2
            [three] => 3
            [1] => 5
        )

    [2] => 7
)

previous_by_key($array, $key, $get_value = false, $strict = false)

previous_by_key メソッドを用いると、 配列中のあるキーの一つ前の要素のキーまたは値を得ることができます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 調べる配列
$key 必須 起点となる要素を特定するキー
$get_value
false
false なら見つかった要素のキーを、true ならば値を返す
$strict
false
キーに厳密な比較を用いるかどうか
返り値 目的のキーまたは値、配列に目的の要素が存在しない場合は null、渡されたキーが配列内に存在しない場合は false。
// 検索対象の配列
$arr = array(2 => 'A', 4 => '2', 6 => 'C');

// 返り値は false, 配列内に 1 のキーは存在しない
$result = Arr::previous_by_key($arr, 1);

// 返り値は null, 手前の要素が存在しない
$result = Arr::previous_by_key($arr, 2);

// 返り値は false, 配列内に '2' (文字列)のキーは存在しない
$result = Arr::previous_by_key($arr, '2', false, true);

// 返り値は 2, 配列内のキー 4 の手前の要素のキー
$result = Arr::previous_by_key($arr, 4);

// 返り値は 'A', 指定された手前の要素の値
$result = Arr::previous_by_key($arr, 4, true);

next_by_key($array, $key, $get_value = false, $strict = false)

next_by_key メソッドを用いると、 配列中のあるキーの一つ次の要素のキーまたは値を得ることができます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 調べる配列
$key 必須 一つ次を調べる対象となるキー
$get_value
false
false なら見つかった要素のキーを、true ならば値を返す
$strict
false
キーに厳密な比較を用いるかどうか
返り値 目的のキーまたは値、配列に目的の要素が存在しない場合は null、渡されたキーが配列内に存在しない場合は false。
// 検索対象の配列
$arr = array(2 => 'A', 4 => '2', 6 => 'C');

// 返り値は false, 配列内に 1 のキーは存在しない
$result = Arr::next_by_key($arr, 1);

// 返り値は null, 次の要素は存在しない
$result = Arr::next_by_key($arr, 6);

// 返り値は false, 配列内に '2' (文字列)のキーは存在しない
$result = Arr::next_by_key($arr, '2', false, true);

// 返り値は 6, 配列内の 4 のキーの次の要素のキー
$result = Arr::next_by_key($arr, 4);

// 返り値は 'C', 指定された次の要素の値
$result = Arr::next_by_key($arr, 4, true);

previous_by_value($array, $value, $get_value = true, $strict = false)

previous_by_value メソッドを用いると、 配列中のある値を持つ要素の一つ前の要素のキーまたは値を得ることができます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 調べる配列
$value 必須 起点となる要素を特定する値
$get_value
true
false なら見つかった要素のキーを、true ならば値を返す
$strict
false
値にに厳密な比較を用いるかどうか
返り値 目的のキーまたは値、配列に目的の要素が存在しない場合は null、渡された値が配列内に存在しない場合は false。
// 検索対象の配列
$arr = array(2 => 'A', 4 => '2', 6 => 'C');

// 返り値は false, 配列内に 'Z' の値は存在しない
$result = Arr::previous_by_value($arr, 'Z');

// 返り値は null, 手前の要素が存在しない
$result = Arr::previous_by_value($arr, 'A');

// 返り値は false, 配列内には 2 の値を持つ要素は存在しない、あるのは '2' (文字列) のみ
$result = Arr::previous_by_value($arr, 2, false, true);

// 返り値は 'A', 指定された要素の手前の値
$result = Arr::previous_by_value($arr, '2');

// 返り値は 2, 指定された要素の手前の要素のキー
$result = Arr::previous_by_value($arr, '2', false);

next_by_value($array, $value, $get_value = true, $strict = false)

next_by_value メソッドを用いると、 配列中のある値を持つ要素の一つ次の要素のキーまたは値を得ることができます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$array 必須 調べる配列
$value 必須 起点となる要素を特定する値
$get_value
true
false なら見つかった要素のキーを、true ならば値を返す
$strict
false
値にに厳密な比較を用いるかどうか
返り値 目的のキーまたは値、配列に目的の要素が存在しない場合は null、渡された値が配列内に存在しない場合は false。
// 検索対象の配列
$arr = array(2 => 'A', 4 => '2', 6 => 'C');

// 返り値は false, 配列内に 'Z' の値は存在しない
$result = Arr::next_by_value($arr, 'Z');

// 返り値は null, 次の要素は存在しない
$result = Arr::next_by_value($arr, 'C');

// 返り値は false, 配列内に 2 の値を持つ要素は存在しない、あるのは '2' (文字列)のみ
$result = Arr::next_by_value($arr, 2, false, true);

// 返り値は 'C', 指定された要素の次の要素の値
$result = Arr::next_by_value($arr, '2');

// 返り値は 6, 指定された要素の次の要素のキー
$result = Arr::next_by_value($arr, '2', false);

'by_key' と 'by_value' のメソッドはエラーを通知するために nullfalse を返すことに注意して下さい。 このために、渡される配列に nullfalse を含めることはできません。

一般的なヘルパー

in_arrayi($needle, $haystack)

in_arrayi 関数は in_array の大小文字を区別しないバージョンです。

パラメータ
パラメータ デフォルト 説明
$needle string 必須 検索する値
$haystrack array 必須 検索対象の配列
返り値 bool
echo in_arrayi('This', array('something','tHis'));
// 実行結果: true

echo in_arrayi('Thi', array('something','tHis'));
// 実行結果: false