Ejemplo n.º 1
0
 public function test_collect_continue()
 {
     $o = '';
     $arr = range(1, 10);
     Enumerator::collect($arr, function ($key, $value) use(&$o) {
         if ($value == 5) {
             throw new ContinueException();
         }
         $o .= $value;
         return;
     });
     $this->assertEquals('1234678910', $o);
 }
Ejemplo n.º 2
0
 /**
  * Fills an array with given values. Optional start and end values can be used.
  *
  * <code>
  * $arr = array("a", "b", "c", "d");
  * Enumerator::fill($arr, 'x');       // array('x', 'x', 'x', 'x')
  * Enumerator::fill($arr, 'z', 2, 2); // array('a', 'b', 'z', 'z')
  * Enumerator::fill($arr, function($index, $value) {
  * 	return $index * $index;
  * }); // array(0, 1, 4, 9)
  *
  * Enumerator::fill(2, 2, function() {
  * 	return 'z';
  * }); // array('a', 'b', 'z', 'z')
  * </code>
  *
  * @param  array  $arr [description]
  * @return [type]      [description]
  */
 public static function fill_(array &$arr)
 {
     $args = array_slice(func_get_args(), 1);
     if (!is_callable($args[count($args) - 1])) {
         $ret = array_shift($args);
         $args[] = function () use(&$ret) {
             return $ret;
         };
     }
     $callback = array_pop($args);
     array_unshift($args, $arr);
     list($start, $length) = call_user_func_array(array(get_called_class(), '_determineRange'), $args);
     $oldSlice = array_slice($arr, $start, $length);
     $newSlice = Enumerator::collect($oldSlice, function ($key, &$value) use(&$callback) {
         return $callback($key, $value);
     });
     array_splice($arr, $start, $length, $newSlice);
     return;
 }