Home
- PHP 5.4 or higher
- HHVM
Emonkak\Collection\Collection
のAPIリファレンスです。
Emonkak\Collection\Collection
のインスタンスメソッドはすべてEmonkak\Collection\Enumerable
で実装されているので、
これをuse
することで任意のクラスでこれらのメソッドを呼び出すこともできます。
エイリアスメソッドについてはEmonkak\Collection\EnumerableAliases
で実装されています。
$valueSelector
のようにselectorと付いたパラメータには関数の他、配列とオブジェクトのアクセサーを表す文字列を渡すことができます。
配列に対するアクセサーは[foo]
のように、オブジェクトに対するアクセサーはfoo
のように表記します。
ネストした配列・オブジェクトに対するアクセサーをfoo[bar].baz
のように定義することもできます。
Collection::from([['foo' => 1], ['foo' => 2]])
->map('[foo]')
->toList()
// => [1, 2]
配列かTraversable
な値からコレクションを生成します。
Collection::from([1, 2, 3]);
Collection::from(new \ArrayIterator([1, 2, 3]));
引数で指定された複数の要素の一覧を結合して1つのコレクションにします。
Collection::concat([[1, 2, 3], [4, 5, 6]]);
// => [1, 2, 3, 4, 5, 6]
$acc
に対して$f
を繰り返し適用して要素を生成するコレクションを返します。
Collection::iterate(0, function($n) {
return $n + 1;
})
->take(5)
->toList();
// => [0, 1, 2, 3, 4]
$start
から$step
ごとにインクリメントされた$end
までの数値を要素とするコレクションを生成します。
$step
に負の値を設定するとデクリメントされます。
$end
に指定した数値自体は含まれません。
Collection::range(10);
// => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Collection::range(1, 11);
// => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Collection::range(0, 30, 5);
// => [0, 5, 10, 15, 20, 25]
Collection::range(0, -10, -1);
// => [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
Collection::range(0);
// => []
$value
が$n
個分繰り返されるコレクションを返します。
$n
が与えられなかった場合は$value
の無限コレクションが得られます。
Collection::repeat(1, 2);
// => [1, 1]
Collection::repeat(1)->take(5)->toList();
// => [1, 1, 1, 1, 1]
引数で指定した複数の要素の一覧を結合した上で、重複した要素を除いたコレクションを返します。
concat()
した後にuniq()
を呼び出すのと等価です。
Collection::union([[1, 2, 3], [101, 2, 1, 10], [2, 1]]);
// => [1, 2, 3, 101, 10]
コレクションの各要素のインデックスが対応するもの同士を配列にしたコレクションを返します。
要素数が違う場合は小さいものに合わせます。
Collection::zip([['moe', 'larry', 'curly'], [30, 40, 50], [true, false, false]]);
// => [["moe", 30, true], ["larry", 40, false], ["curly", 50, false]]
コレクションの各要素に対して関数$f
を呼び出します。
$f
は($element, $key, $array)
の3つの引数を取ります。
Collection::from([1, 2, 3])->each(function($x, $k, $xs) {
// 1, 2, 3を順番に出力
echo $x, PHP_EOL;
});
$xs = ['one' => 1, 'two' => 2, 'three' => 3];
Collection::from($xs)->each(function($x, $k, $xs) {
// one-1, two-2, three-3を順番に出力
echo $k, '-', $x, PHP_EOL;
});
Alias: collect()
コレクションの各要素に対して関数$valueSelector
を適用します。
$valueSelector
は($element, $key, $xs)
の3つの引数を取ります。
$keySelector
が与えられた場合はキーに対しても関数を適用します。
$keySelector
は($key, $element, $xs)
の3つの引数を取ります。
Collection::from([1, 2, 3])->map(function($x) {
return $x * 3;
});
// => [3, 6, 9]
Collection_::from(['one' => 1, 'two' => 2, 'three' => 3])->map(function($x) {
return $x * 3;
});
// => [3, 6, 9]
Alias: flatMap()
コレクションの各要素に対して関数$valueSelector
を適用した結果を平坦化して返します。
Collection::from([1, 2, 3])
->concatMap(function($n) {
return range(1, $n);
});
// => [1, 1, 2, 1, 2, 3];
コレクションの各要素に対して関数$valueSelector
を並列に適用します。
$valueSelector
は引数(element)
を1つだけ取る関数です。
$n
は同時に起動するワーカープロセスの数です。
$n
が2以上の時は複数のワーカープロセスによって処理されるため、返ってくる要素の順序は不定です。
$timeout
が与えられた時は指定した秒数で処理をタイムアウトさせます。
parMap()
は内部でpcntl_fork()
を利用しているので処理系が--enable-pcntl
を指定してコンパイルされている必要があります。
$xs = Collection::from([1, 2, 3])->parMap(function($x) {
sleep(2);
return $x * 3;
});
// 4並列で実行されるので約2秒ですべての計算が終わる
foreach ($xs as $x) {
var_dump($x); // 3, 6, 9が順不同に出力される
}
Aliases: inject()
, foldl()
コレクションの要素の左結合で畳み込んだ結果を返します。
$f
は($acc, $value, $key, $xs)
の4つの引数を取ります。
$sum = Collection::from([1, 2, 3])->reduce(function($acc, $n) {
return $acc + $n;
}, 0);
// => 6
Aliases: foldr()
コレクションの要素を右結合で畳み込んだ結果を返します。
$f
は($acc, $value, $key, $xs)
の4つの引数を取ります。
$xss = [[0, 1], [2, 3], [4, 5]];
$flat = Collection::from($xss)->reduceRight(function($acc, $xs) {
return array_merge($acc, $xs);
}, []);
// => [4, 5, 2, 3, 0, 1]
Alias: detect()
コレクションの要素の中から$valueSelector
が最初にtrue
を返す要素を返します。
見付からなかった場合はnull
を返します。
$even = Collection::from([1, 2, 3, 4, 5, 6])->find(function($n) {
return $n % 2 === 0;
});
// => 2
Alias: select()
コレクションの要素について$valueSelector
がtrue
を返すものを選択します。
逆の操作を行なうメソッドとしてreject()
があります。
キーを維持したままフィルタリングをするので、返り値のコレクションのインデックスは連番にならないことがあります。
$evens = Collection::from([1, 2, 3, 4, 5, 6])->filter(function($n) {
return $n % 2 === 0;
});
// => [1 => 2, 3 => 4, 5 => 6]
コレクションの要素から$properties
のキーと値のペアに一致するものを選択します。
$members = [
['name' => 'Yui Ogura', 'age' => 17],
['name' => 'Rina Hidaka', 'age' => 19],
['name' => 'Yuka Iguchi', 'age' => 24],
['name' => 'Yoko Hikasa', 'age' => 27],
['name' => 'Kana Hanazawa', 'age' => 24]
];
Collection::from($members)->where(['[age]' => 24]);
// => [
// ["name" => "Yuka Iguchi", "age" => 24],
// ["name" => "Kana Hanazawa", "age" => 24]
// ]
コレクションの要素から$properties
のキーと値のペアに最初に一致するものを返します。
見付からなかった場合はnull
を返します。
$members = [
['name' => 'Yukari Tamura', 'age' => 17],
['name' => 'Yui Horie', 'age' => 17]
];
Collection::from($members)->findWhere(['[age]' => 17]);
// => ["name" => "Yukari Tamura", "age" => 17]
コレクションの要素について$valueSelector
がtrue
を返すものを除外します。
逆の操作を行うメソッドとしてfilter()
があります。
キーを維持したままフィルタリングをするので、返り値のコレクションのインデックスは連番にならないことがあります。
$odds = Collection::from([1, 2, 3, 4, 5, 6])->reject(function($n) {
return $n % 2 === 0;
});
// => [0 => 1, 2 => 3, 4 => 5]
Alias: all()
コレクションの要素がすべてtrue
として評価される値であればtrue
を返します。
$valueSelector
が与えられた時はその結果から判断します。
Collection::from([true, 1, null, 'yes'])->every();
// => false
Alias: any()
コレクションの要素の中にtrue
として評価される値が1つでもあればtrue
を返します。
$valueSelector
が与えられた時はその結果から判断します。
Collection::from([true, 1, null, 'yes'])->some();
// => true
Alias: includes()
コレクションの要素に$target
が含まれていればtrue
を返します。
比較は===
演算子を使って厳密に行われます。
Collection::from([1, 2, 3])->contains(3);
// => true
コレクションの要素をオブジェクトと見なして指定した$method
を呼び出します。
$xs = [new DateTime('2000-01-01'), new DateTime('2013-01-01')];
Collection::from($xs)->invoke('format', 'Y-m-d H:i:s');
// => [
// "2000-01-01 00:00:00",
// "2013-01-01 00:00:00"
// ]
コレクションの要素の中から指定した$property
の値を抽出します。
$stooges = [
['name' => 'moe', 'age' => 40],
['name' => 'larry', 'age' => 50],
['name' => 'curly', 'age' => 60]
];
Collection::from($stooges)->pluck('[name]');
// => ["moe", "larry", "curly"]
join(mixed[] $inner, callable $outerKeySelector, callable $innerKeySelector, callable $resultValueSelector): Collection
コレクションの要素と$inner
の要素を一致するキーに基いて結合させます。
キーが一致する要素がないものは結果に含まれません(内部結合)。
キーは、コレクションの要素に対する$outerKeySelector
の呼び出し、$inner
の要素に対する$innerKeySelector
の呼び出しで決定されます。
$resultValueSelector
はキーが一致した要素のペアを受け取って結果を返す関数です。
引数は($outerValue, $innerValue)
で与えられます。
$users = [
['user_id' => 1, 'name' => 'User1'],
['user_id' => 2, 'name' => 'User2'],
['user_id' => 3, 'name' => 'User3'],
['user_id' => 4, 'name' => 'User4'],
['user_id' => 5, 'name' => 'User5'],
];
$addresses = [
['user_id' => 1, 'address' => 'Address1'],
['user_id' => 2, 'address' => 'Address2'],
['user_id' => 2, 'address' => 'Address3'],
['user_id' => 5, 'address' => 'Address4']
];
Collection::from($users)
->join(
$addresses,
function($user) { return $user['user_id']; },
function($address) { return $address['user_id']; },
function($user, $address) {
$user['address'] = $address;
return $user;
}
);
// => [
// ['user_id' => 1, 'name' => 'User1', 'address' => ['user_id' => 1, 'address' => 'Address1']],
// ['user_id' => 2, 'name' => 'User2', 'address' => ['user_id' => 2, 'address' => 'Address2']],
// ['user_id' => 2, 'name' => 'User2', 'address' => ['user_id' => 2, 'address' => 'Address3']],
// ['user_id' => 5, 'name' => 'User5', 'address' => ['user_id' => 5, 'address' => 'Address4']
// ]
outerJoin(mixed[] $inner, callable $outerKeySelector, callable $innerKeySelector, callable $resultValueSelector): Collection
コレクションの要素と$inner
の要素を一致するキーに基いて結合させます。
キーが一致する要素がないものはnullとして$resultValueSelector
に渡されます(外部結合)。
キーは、コレクションの要素に対する$outerKeySelector
の呼び出し、$inner
の要素に対する$innerKeySelector
の呼び出しで決定されます。
$resultValueSelector
はキーが一致した要素のペアを受け取って結果を返す関数です。
引数は($outerValue, $innerValue)
で与えられます。
$innerValue
はnull
の可能性があります。
$users = [
['user_id' => 1, 'name' => 'User1'],
['user_id' => 2, 'name' => 'User2'],
['user_id' => 3, 'name' => 'User3'],
['user_id' => 4, 'name' => 'User4'],
['user_id' => 5, 'name' => 'User5'],
];
$addresses = [
['user_id' => 1, 'address' => 'Address1'],
['user_id' => 2, 'address' => 'Address2'],
['user_id' => 2, 'address' => 'Address3'],
['user_id' => 5, 'address' => 'Address4']
];
Collection::from($users)
->join(
$addresses,
function($user) { return $user['user_id']; },
function($address) { return $address['user_id']; },
function($user, $address) {
$user['address'] = $address;
return $user;
}
);
// => [
// ['user_id' => 1, 'name' => 'User1', 'address' => ['user_id' => 1, 'address' => 'Address1']],
// ['user_id' => 2, 'name' => 'User2', 'address' => ['user_id' => 2, 'address' => 'Address2']],
// ['user_id' => 2, 'name' => 'User2', 'address' => ['user_id' => 2, 'address' => 'Address3']],
// ['user_id' => 3, 'name' => 'User3', 'address' => null],
// ['user_id' => 4, 'name' => 'User3', 'address' => null],
// ['user_id' => 5, 'name' => 'User5', 'address' => ['user_id' => 5, 'address' => 'Address4']
// ]
groupJoin(mixed[] $inner, callable $outerKeySelector, callable $innerKeySelector, callable $resultValueSelector): Collection
コレクションの要素と$inner
の要素を一致するキーに基いて結合させてその結果をグループ化します。
キーは、コレクションの要素に対する$outerKeySelector
の呼び出し、$inner
の要素に対する$innerKeySelector
の呼び出しで決定されます。
$resultValueSelector
はキーが一致した要素のペアを受け取って結果を返す関数です。
引数は($outerValue, $innerValues)
で与えられます。
$innerValue
はnull
の可能性があります。
$users = [
['user_id' => 1, 'name' => 'User1'],
['user_id' => 2, 'name' => 'User2'],
['user_id' => 3, 'name' => 'User3'],
['user_id' => 4, 'name' => 'User4'],
['user_id' => 5, 'name' => 'User5'],
];
$addresses = [
['user_id' => 1, 'address' => 'Address1'],
['user_id' => 2, 'address' => 'Address2'],
['user_id' => 2, 'address' => 'Address3'],
['user_id' => 5, 'address' => 'Address4']
];
Collection::from($users)
->groupJoin(
$addresses,
function($user) { return $user['user_id']; },
function($addresses) { return $address['user_id']; },
function($user, $addresses) {
$user['addresses'] = $addresses;
return $user;
}
);
// => [
// ['user_id' => 1, 'name' => 'User1', 'addresses' => [['user_id' => 1, 'address' => 'Address1']]],
// ['user_id' => 2, 'name' => 'User2', 'addresses' => [['user_id' => 2, 'address' => 'Address2'], ['user_id' => 2, 'address' => 'Address3']]],
// ['user_id' => 3, 'name' => 'User3', 'addresses' => []],
// ['user_id' => 4, 'name' => 'User3', 'addresses' => []],
// ['user_id' => 5, 'name' => 'User5', 'address' => [['user_id' => 5, 'address' => 'Address4']]
// ]
コレクションの要素の中から最大の値を返します。
$valueSelector
に関数を指定した場合は、その関数を適用した結果を基準にします。
$valueSelector
に文字列を指定した場合は、該当のプロパティを基準にします。
$xs
が空の時は-INF
を返します。
$stooges = [
['name' => 'moe', 'age' => 40],
['name' => 'larry', 'age' => 50],
['name' => 'curly', 'age' => 60]
];
Collection::from($stooges)->max('[age]');
// => ["name" => "curly", "age" => 60]
コレクションの要素の中から比較関数$comparer
の結果を基準に、最大の要素を返します。
Collection::from([1, 2, 3])
->maxWith(function($v0, $v1) {
if ($v0 == $v1) return 0;
return ($v0 < $v1) ? -1 : 1;
});
// => 3
コレクションの要素の中の最小の値を返します。
$valueSelector
に関数を指定した場合は、その関数を適用した結果を基準にします。
$valueSelector
に文字列を指定した場合は、該当のプロパティを基準にします。
$xs
が空の時はINF
を返します。
$stooges = [
['name' => 'moe', 'age' => 40],
['name' => 'larry', 'age' => 50],
['name' => 'curly', 'age' => 60]
];
Collection::from($stooges)->min('[age]');
// => ["name" => "moe", "age" => 40]
コレクションの要素の中から比較関数$comparer
の結果を基準に、最小の要素を返します。
Collection::from([3, 2, 1])
->maxWith(function($v0, $v1) {
if ($v0 == $v1) return 0;
return ($v0 < $v1) ? -1 : 1;
});
// => 1
コレクションの要素の合計を返します。
Collection::from([0, 1, 2, 3, 4, 5])->sum();
=> 15
コレクションの要素の積を返します。
Collection::from([0, 1, 2, 3, 4, 5])->product();
=> 120
コレクションの要素を数値と見なして平均を求めます。
Collection::from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])->average();
=> 4.5
コレクションの要素を比較関数$valueSelector
を使ってソートします。
$valueSelector
に文字列を指定した場合は該当するプロパティを基準にします。
比較関数は事前にすべての要素に対して計算するので、要素の数だけしか呼び出されません。
Collection::from([1, 2, 3, 4, 5, 6])->sortBy(function($n) { return sin($n); });
// => [5, 4, 6, 3, 1, 2]
コレクションの要素を$valueSelector
を呼び出した結果を基準にグループ化します。
Collection::from([1.3, 2.1, 2.4])->groupBy(function($n) { return floor($n); });
// => [1 => [1.3], 2 => [2.1, 2.4]]
コレクションの要素を$valueSelector
を呼び出した結果をキーとした新しい配列にします。
$stooges = [
['name' => 'moe', 'age' => 40],
['name' => 'larry', 'age' => 50],
['name' => 'curly', 'age' => 60]
];
Collection::from(stooges)->indexBy('[age]');
// => [
// 40 => ['name' => 'moe', 'age' => 40],
// 50 => ['name' => 'larry', 'age' => 50],
// 60 => ['name' => 'curly', 'age' => 60]
// ]
コレクションの要素を$valueSelector
を呼び出した結果から数え上げます。
Collection::from([1, 2, 3, 4, 5])->countBy(function($n) {
return $n % 2 === 0 ? 'even' : 'odd';
});
// => ["odd" => 3, "even" => 2]
コレクションの要素の順序をシャッフルします。
Collection::from([1, 2, 3, 4, 5, 6])->shuffle();
// => [4, 1, 6, 3, 5, 2]
コレクションから要素を1つランダムに選んで返します。
$n
が与えらた場合は$n
個の要素をランダムに選択された新しいコレクションを返します。
Collection::from([1, 2, 3, 4, 5, 6])->sample();
// => 4
Collection::from([1, 2, 3, 4, 5, 6])->sample(3);
// => [1, 6, 2]
一度生成された要素をキャッシュするコレクションを返します。
Collection::iterate([0, 1], function($pair) {
return [$pair[1], $pair[0] + $pair[1]];
})
->map(function($pair) { return $pair[0]; })
->memoize()
->take(10)
->last();
// => 34
コレクションをキーを維持したまま連想配列にします。
Collection::from(new \ArrayObject(['a' => 1, 'b' => 2, 'c' => 3]))->toArray();
// => ["a" => 1, "b" => 2, "c" => 3]
コレクションをキーを維持したまま再帰的に連想配列にします。
$depth
が与えられた場合はその深さまでしか処理しません。
Collection::from([new \ArrayObject(['foo' => 1, 'bar' => 2]), new \ArrayObject(['baz' => 3])])->toArrayRec();
// => [['foo' => 1, 'bar' => 2], ['baz' => 3]]
コレクションを連番のインデックスの配列にします。
Collection::from(new \ArrayObject(['a' => 1, 'b' => 2, 'c' => 3]))->toList();
// => [1, 2, 3]
コレクションを再帰的に連番のインデックスの配列にします。
$depth
が与えられた場合はその深さまでしか処理しません。
Collection::from([new \ArrayObject(['foo' => 1, 'bar' => 2]), new \ArrayObject(['baz' => 3])])->toListRec();
// => [[1, 2], [3]]
コレクションの要素数を返します。
Collection::from(["one" => 1, "two" => 2, "three" => 3])->size();
// => 3
Aliases: head()
, take()
コレクションの最初の要素を返します。
$n
を指定した場合は先頭からn個分の要素を含むコレクションを返します。
Collection::from([1, 2, 3])->first();
// => 1
Collection::from([1, 2, 3])->first(1);
// => [1]
Collection::from([1, 2, 3])->first(2);
// => [1, 2]
コレクションの最初の要素を返します。見付からなかった場合は$default
を返します。
Collection::from([1, 2, 3])->firstOrElse(10);
// => 1
Collection::from([])->firstOrElse(10);
// => 10
コレクションの末尾から$n
個の要素を除いた新しいコレクションを返します。
Collection::from([5, 4, 3, 2, 1])->initial();
// => [5, 4, 3, 2]
コレクションの最後の要素を返します。
$n
に2以上の値が指定された時は末尾の$n
個の要素からなるコレクションを返します。
Collection::from([5, 4, 3, 2, 1])->last();
// => 1
Collection::from([5, 4, 3, 2, 1])->last(2);
// => [2, 1]
コレクションの最後の要素を返します。見付からなかった場合は$default
を返します。
Collection::from([1, 2, 3])->lastOrElse(10);
// => 3
Collection::from([])->lastOrElse(10);
// => 10
Aliases: tail()
, drop()
コレクションの先頭から$n
個の要素を除いた新しいコレクションを返します。
Collection::from([5, 4, 3, 2, 1])->rest();
// => [4, 3, 2, 1]
$valueSelector
が最初にtrue
を返すまでの要素からなるコレクションを返します。
Collection::from([1, 2, 3, 4, 5, 1, 2, 3])->takeWhile(function($x) {
return $x < 3;
});
// => [1, 2]
$valueSelector
が最初にtrue
を返すまでの要素を除いたコレクションを返します。
Collection::from([1, 2, 3, 4, 5, 1, 2, 3])->dropWhile(function($x) {
return $x < 3;
});
// => [3, 4, 5, 1, 2, 3]
コレクションの要素の中からfalse
として評価される値を除いた新しいコレクションを返します。
Collection::from([0, 1, false, 2, '', 3])->compact();
// => [1, 2, 3]
ネストしたコレクションの要素を平坦化します。
$shallow
がtrue
の時は1つ分の深さしか平坦化しません。
Collection::from([1, [2], [3, [[4]]]])->flatten();
=> [1, 2, 3, 4]
Collection::from([1, [2], [3, [[4]]]], true)->flatten();
=> [1, 2, 3, [[4]]]
コレクションの要素から$values
の値を除いた新しいコレクションを返します。
Collection::from([1, 2, 1, 0, 3, 1, 4])->without(0, 1);
// => [2, 3, 4]
Collection::union()
のインスタンスメソッド版です。
引数で指定した複数の要素の一覧を結合した上で、重複した要素を除いたコレクションを返します。
concat()
した後にuniq()
を呼び出すのと等価です。
Collection::from([1, 2, 3])->union([101, 2, 1, 10], [2, 1]);
// => [1, 2, 3, 101, 10]
与えられた要素の一覧$xss
すべてに存在する要素でのみ構成されるコレクションを返します。
Collection::from([1, 2, 3])->intersection([101, 2, 1, 10], [2, 1]);
// => [1, 2]
コレクションの要素から$others
の要素を取り除いた新しいコレクションを返します。
Collection::from([1, 2, 3, 4, 5])->difference([5, 2, 10]);
// => [1, 3, 4]
Alias: unique()
コレクションの要素から重複するものを排除します。
$valueSelector
に関数が与えられた場合は$valueSelector
を適用した結果を基準にします。
比較は型によって厳密に行われます。
Collection::from([1, 2, 1, 3, 1, 4])->uniq();
// => [1, 2, 3, 4]
Collection::zip()
のインスタンスメソッド版です。
コレクションの各要素のインデックスが対応するもの同士を配列にしたコレクションを返します。
要素数が違う場合は小さいものに合わせます。
Collection::from(['moe', 'larry', 'curly'])->zip([30, 40, 50], [true, false, false]);
// => [["moe", 30, true], ["larry", 40, false], ["curly", 50, false]]
Collection::zip()
によって結合された要素を元に戻します。
Collection::from([['moe', 'larry', 'curly'], [30, 40, 50], [true, false, false]])->unzip();
// => [["moe", 30, true], ["larry", 40, false], ["curly", 50, false]]
$xs
の要素をキーとして$values
の要素を値としてコレクションを作成します。
$values
が与えらなかった場合は$xs
にキーと値のペアが格納されていることを期待します。
Collection::from(['moe', 'larry', 'curly'])->object([30, 40, 50]);
// => ["moe" => 30, "larry" => 40, "curly" => 50]
Collection::from([['moe', 30], ['larry', 40], ['curly', 50]])->object();
// => ["moe" => 30, "larry" => 40, "curly" => 50]
コレクションの中から$value
のあるインデックスを探します。
存在しなかった場合は-1
を返します。
$fromIndex
を指定した場合はそのインデックスから探索を開始します。
ソート済みのであることが保証されていれば$fromIndex
にtrue
を指定することで、二分探索による効率的な探索を実行できます。
Collection::from([1, 2, 3])->indexOf(2);
// => 1
コレクションの中から$value
のあるインデックスを探します。
indexOf()
の末尾から探索する版です。
Collection::from([1, 2, 3, 1, 2, 3])->lastIndexOf(2);
=> 4
コレクションから二分探索で$value
の挿入位置を調べます。
Collection::from([10, 20, 30, 40, 50])->sortedIndex(35);
// => 3
$stooges = [
['name' => 'moe', 'age' => 40],
['name' => 'curly', 'age' => 60]
];
Collection::from($stooges)->sortedIndex(['name' => 'larry', 'age' => 50], '[age]');
// => 1
コレクションの要素を$separator
を区切りにして文字列として結合します。
Collection::from(['foo', 'bar', 'baz'])->intercalate(',');
// => 'foo,bar,baz'
コレクションのすべての要素が$n
で指定された回数だけ繰り返されたコレクションを新しく返します。
$n
が与えられなかった場合は繰り返しを無限に続けます。
Collection::from([1, 2])->cycle(2);
// => [1, 2, 1, 2]
Collection::from([1, 2, 3])->cycle()->take(5)->toList();
// => [1, 2, 3, 1, 2]
要素の順序を逆順にしたコレクションを返します。
Collection::from([1, 2, 3])->reverse();
// => [3, 2, 1]
コレクションの要素を昇順にソートします。
比較関数$compare
が与えられた場合はそれで比較されたソート結果を返します。
Collection::from([2, 3, 1])->sort();
// => [1, 2, 3]
Collection::from([2, 3, 1])->sort(function($x, $y) {
if ($x === $y) return 0;
return $x < $y ? 1 : -1;
});
// => [3, 2, 1]
Collection::concat()
のインスタンスメソッド版です。
引数で指定された複数の要素の一覧を結合して1つのコレクションにします。
Collection::from([1, 2, 3])->concatWith([4, 5, 6])
// => [1, 2, 3, 4, 5, 6]
コレクションの要素のキーをすべて取得します。
Collection::from(['one' => 1, 'two' => 2, 'three' => 3])->keys();
// => ["one", "two", "three"]
コレクションの要素の値をすべて取得します。
Collection::from(['one' => 1, 'two' => 2, 'three' => 3])->values();
// => [1, 2, 3]
コレクションの各要素をキーと値のペアにして返します。
Collection::from(['one' => 1, 'two' => 2, 'three' => 3])->pairs();
// => [["one", 1], ["two", 2], ["three", 3]]
コレクションのキーと値を入れ替えます。 キーが重複した場合は前のものを上書きします。
Collection::from(["Moe" => "Moses", "Larry" => "Louis", "Curly" => "Jerome"])->invert();
// => ["Moses" => "Moe", "Louis" => "Larry", 'Jerome' => "Curly"];
コレクションを$sources
で拡張します。
同名のキーが存在した場合は上書されます。
Collection::from(['name' => 'moe'])->extend(['age' => 50]);
// => ['name' => 'moe', 'age' => 50]
コレクションの要素の中から$keys
で指定されたキーの値を取り出します。
Collection::from(['name' => 'moe', 'age' => 50, 'userid' => 'moe1'])->pick('name', 'age');
// => ['name' => 'moe', 'age' => 50]
コレクションの要素の中から$keys
で指定されたキーの以外の値を取り出します。
Collection::from(['name' => 'moe', 'age' => 50, 'userid' => 'moe1'])->omit('userid');
// => ['name' => 'moe', 'age' => 50]
コレクションに存在しないキーの値を$defaults
から補完します。
isset()
でキーの存在を確認しているのでnull
は存在しないものとして扱われます。
$iceCream = ['flavor' => 'chocolate'];
Collection::from($iceCream)->defaults(['flavor' => 'vanilla', 'sprinkles' => 'lots']);
// => ["flavor" => "chocolate", "sprinkles" => "lots"]
コレクションが空かどうかを判定します。
Collection::from([1, 2, 3])->isEmpty();
// => false
Collection::from(new EmptyIterator())->isEmpty();
// => true