配列の操作
このページは、配列に関連するクラス Nette\Utils\Arrays、ArrayHash、ArrayList に焦点を当てています。
インストール:
Arrays
api:Nette\Utils\Arrays は、配列を操作するための便利な関数を含む静的クラスです。イテレータに対するその類似物は Nette\Utils\Iterables です。
以下の例では、エイリアスが作成されていることを前提としています:
associate(array $array, mixed $path): array|\stdClass
関数は、指定されたパス $path
に従って配列 $array
を連想配列またはオブジェクトに柔軟に変換します。パスは文字列または配列にすることができます。入力配列のキー名と
‚[]‘, ‚->‘, ‚=‘, ‚|‘
のような演算子で構成されます。パスが無効な場合、Nette\InvalidArgumentException
をスローします。
contains(array $array, $value): bool
配列に値が存在するかどうかをテストします。厳密な比較 (===
) を使用します。
every(array $array, callable $predicate): bool
配列内のすべての要素が、シグネチャ function ($value, $key, array $array): bool
を持つ
$predicate
に実装されたテストに合格するかどうかをテストします。
some() を参照。
filter(array $array, callable $predicate): array
指定された述語に一致するすべてのキーと値のペアを含む新しい配列を返します。コールバックはシグネチャ
function ($value, int|string $key, array $array): bool
を持ちます。
first(array $array, ?callable $predicate=null, ?callable $else=null): mixed
最初の項目(指定されている場合、述語に一致するもの)を返します。そのような項目が存在しない場合、$else
の呼び出し結果または null を返します。 パラメータ $predicate
はシグネチャ
function ($value, int|string $key, array $array): bool
を持ちます。
reset()
とは異なり、内部ポインタを変更しません。パラメータ $predicate
と
$else
はバージョン4.0.4から存在します。
last() を参照。
firstKey(array $array, ?callable $predicate=null): int|string|null
最初の項目(指定されている場合、述語に一致するもの)のキー、またはそのような項目が存在しない場合は
null を返します。述語 $predicate
はシグネチャ
function ($value, int|string $key, array $array): bool
を持ちます。
lastKey() を参照。
flatten(array $array, bool $preserveKeys=false): array
多次元配列をフラットな配列に統合します。
get(array $array, string|int|array $key, ?mixed $default=null): mixed
要素 $array[$key]
を返します。存在しない場合、例外 Nette\InvalidArgumentException
をスローするか、3番目のパラメータ $default
が指定されている場合はそれを返します。
キー $key
は配列にすることもできます。
getRef(array &$array, string|int|array $key): mixed
指定された配列要素への参照を取得します。要素が存在しない場合、null値で作成されます。
get() 関数と同様に、多次元配列を扱うことができます。
grep(array $array, string $pattern, bool $invert=false): array
その値が正規表現 $pattern
に一致する配列の要素のみを返します。$invert
が
true
の場合、逆に一致しない要素を返します。式のコンパイルまたは処理中のエラーは、例外
Nette\RegexpException
をスローします。
insertAfter(array &$array, string|int|null $key, array $inserted): void
配列 $inserted
の内容を、キー $key
を持つ要素の直後に配列 $array
に挿入します。$key
が null
の場合(または配列内にない場合)、末尾に挿入されます。
insertBefore(array &$array, string|int|null $key, array $inserted): void
配列 $inserted
の内容を、キー $key
を持つ要素の前に配列 $array
に挿入します。$key
が null
の場合(または配列内にない場合)、先頭に挿入されます。
invoke(iterable $callbacks, …$args): array
すべてのコールバックを呼び出し、結果の配列を返します。
invokeMethod(iterable $objects, string $method, …$args): array
配列内の各オブジェクトに対してメソッドを呼び出し、結果の配列を返します。
isList(array $array): bool
配列がゼロから始まる昇順の数値キーに従ってインデックス付けされているかどうか(別名 list)を検証します。
last(array $array, ?callable $predicate=null, ?callable $else=null): mixed
最後の項目(指定されている場合、述語に一致するもの)を返します。そのような項目が存在しない場合、$else
の呼び出し結果または null を返します。 パラメータ $predicate
はシグネチャ
function ($value, int|string $key, array $array): bool
を持ちます。
end()
とは異なり、内部ポインタを変更しません。パラメータ $predicate
と
$else
はバージョン4.0.4から存在します。
first() を参照。
lastKey(array $array, ?callable $predicate=null): int|string|null
最後の項目(指定されている場合、述語に一致するもの)のキー、またはそのような項目が存在しない場合は
null を返します。述語 $predicate
はシグネチャ
function ($value, int|string $key, array $array): bool
を持ちます。
firstKey() を参照。
map(array $array, callable $transformer): array
配列内のすべての要素に対して $transformer
を呼び出し、返された値の配列を返します。コールバックはシグネチャ
function ($value, $key, array $array): mixed
を持ちます。
mapWithKeys(array $array, callable $transformer): array
元の配列の値とキーを変換して新しい配列を作成します。関数 $transformer
はシグネチャ function ($value, $key, array $array): ?array{$newKey, $newValue}
を持ちます。$transformer
が null
を返した場合、要素はスキップされます。保持された要素については、返された配列の最初の要素が新しいキーとして使用され、2番目の要素が新しい値として使用されます。
このメソッドは、配列の構造(キーと値を同時に)を変更する必要がある場合や、変換中に要素をフィルタリングする必要がある場合(不要な要素に対してnullを返すことで)に役立ちます。
mergeTree(array $array1, array $array2): array
2つの配列を再帰的にマージします。例えば、ツリー構造のマージに適しています。マージ時には、配列に適用される
+
演算子のように同じルールに従います。つまり、最初の配列に2番目の配列のキー/値ペアを追加し、キーが衝突した場合は、最初の配列の値を保持します。
2番目の配列の値は常に最初の配列の末尾に追加されます。2番目の配列から値 10
が消えることは、少し混乱を招くかもしれません。認識する必要があります。この値と、最初の配列の値
5
は、同じ数値キー 0
が割り当てられています。そのため、結果の配列には最初の配列の要素のみが含まれます。
normalize(array $array, ?string $filling=null): array
配列を連想配列に正規化します。数値キーはその値で置き換えられ、新しい値は
$filling
になります。
pick(array &$array, string|int $key, ?mixed $default=null): mixed
配列から要素の値を返して削除します。存在しない場合は例外をスローするか、$default
が指定されている場合はその値を返します。
renameKey(array &$array, string|int $oldKey, string|int $newKey): bool
配列内のキーの名前を変更します。キーが配列内で見つかった場合に true
を返します。
getKeyOffset(array $array, string|int $key): ?int
配列内の指定されたキーの位置を返します。位置は0から番号付けされます。キーが見つからない場合、関数は
null
を返します。
some(array $array, callable $predicate): bool
配列内の少なくとも1つの要素が、シグネチャ function ($value, $key, array $array): bool
を持つ $predicate
に実装されたテストに合格するかどうかをテストします。
every() を参照。
toKey(mixed $key): string|int
値を配列キー(整数または文字列のいずれか)に変換します。
toObject(iterable $array, object $object): object
配列 $array
の要素をオブジェクト $object
にコピーし、その後、それを返します。
wrap(array $array, string
$prefix=''
, string $suffix=''
): array
配列内の各項目を文字列にキャストし、接頭辞 $prefix
と接尾辞
$suffix
で囲みます。
ArrayHash
オブジェクト Nette\Utils\ArrayHash はジェネリッククラス stdClass の子孫であり、それを配列のように扱う能力(つまり、例えば角括弧を通してメンバーにアクセスする)で拡張します:
count($hash)
関数を使用して要素の数を取得できます。
オブジェクトに対して、配列の場合と同様に、参照を使用しても反復処理が可能です:
既存の配列を from()
メソッドを使用して ArrayHash
に変換できます:
変換は再帰的です:
これは2番目のパラメータで防ぐことができます:
配列への逆変換:
ArrayList
Nette\Utils\ArrayList は線形配列を表し、インデックスは0から始まる昇順の整数のみです。
既存の配列を from()
メソッドを使用して ArrayList
に変換できます:
count($list)
関数を使用して要素の数を取得できます。
オブジェクトに対して、配列の場合と同様に、参照を使用しても反復処理が可能です:
許可された値以外のキーへのアクセスは、例外 Nette\OutOfRangeException
をスローします:
キーの削除は要素の再番号付けを引き起こします:
新しい要素を prepend()
メソッドを使用して先頭に追加できます: