Enjoy high order functions
$ this ->assertEquals ('aaaa ' , only ('a ' )->repeat (4 )->implode ());
$ this ->assertEquals ('Hal ' , chars ('Hallo ' )->take (3 )->implode ());
$ this ->assertEquals ('lo ' , chars ('Hallo ' )->skip (3 )->implode ());
$ this ->assertEquals ('oBar ' , chars ('FooBarQuatz ' )->slice (2 , 6 )->implode ());
$ this ->assertEquals ([['F ' , 'o ' ], ['o ' , 'B ' ], ['a ' , 'r ' ]], chars ('FooBar ' )->chunks (2 )->collect ());
$ it = iter ([6 , 7 , 8 ]);
$ sum1 = function ($ sum , int $ a ) {
return $ sum + $ a ;
};
$ sum2 = function (int $ sum , int $ a ) {
return $ sum + $ a ;
};
$ this ->assertEquals (21 , $ it ->fold ($ sum1 ));
$ this ->assertEquals (63 , $ it ->fold ($ sum2 , 42 ));
$ belowTen = function (int $ item ) {
return $ item < 10 ;
};
$ this ->assertEquals ([0 , 1 , 2 ], iter ([0 , 1 , 2 , 10 , 20 ])->takeWhile ($ belowTen )->collect ());
$ belowTen = function (int $ item ) {
return $ item < 10 ;
};
$ this ->assertEquals ([10 , 20 ], iter ([0 , 1 , 2 , 10 , 20 ])->skipWhile ($ belowTen )->collect ());
$ this ->assertEquals ('ab ' , chars ('abcdef ' )->before ('c ' )->implode ());
$ this ->assertEquals (['a ' => 'z ' , 'b ' => 'y ' ], iter (['a ' => 'z ' , 'b ' => 'y ' , 'c ' => 'x ' , 'd ' => 'w ' ])->before ('x ' )->collect ());
$ this ->assertEquals ('ef ' , chars ('abcdef ' )->after ('d ' )->implode ());
$ this ->assertEquals (['d ' => 'w ' ], iter (['a ' => 'z ' , 'b ' => 'y ' , 'c ' => 'x ' , 'd ' => 'w ' ])->after ('x ' )->collect ());
$ this ->assertEquals ('def ' , chars ('abcdef ' )->from ('d ' )->implode ());
$ this ->assertEquals (['c ' => 'x ' , 'd ' => 'w ' ], iter (['a ' => 'z ' , 'b ' => 'y ' , 'c ' => 'x ' , 'd ' => 'w ' ])->from ('x ' )->collect ());
$ this ->assertEquals ('abc ' , chars ('abcdef ' )->until ('c ' )->implode ());
$ this ->assertEquals (['a ' => 'z ' , 'b ' => 'y ' , 'c ' => 'x ' ], iter (['a ' => 'z ' , 'b ' => 'y ' , 'c ' => 'x ' , 'd ' => 'w ' ])->until ('x ' )->collect ());
$ positive = function (int $ item ) {
return $ item >= 0 ;
};
$ this ->assertTrue (iter ([0 , 1 , 2 , 3 ])->all ($ positive ));
$ this ->assertFalse (iter ([-1 , 2 , 3 , 4 ])->all ($ positive ));
$ positive = function (int $ item ) {
return $ item > 0 ;
};
$ this ->assertTrue (iter ([-1 , 0 , 1 ])->any ($ positive ));
$ this ->assertFalse (iter ([-1 ])->any ($ positive ));