Esempio n. 1
0
 public function test_combinatoin_2()
 {
     $arr = array(1, 2, 3, 4);
     Enumerator::combination_($arr, 1, function ($key, &$value) {
         if ($value[0] == 3) {
             throw new ContinueException();
         }
         $value[0]++;
     });
     $this->assertEquals(array(array(2), array(3), array(3), array(5)), $arr);
 }
Esempio n. 2
0
 /**
  * The default array can be passed as the first argument in the constructor.
  * @param array optional $defaults
  */
 public function __construct($defaults = array())
 {
     if (is_null(self::$enumData['methodMap'])) {
         self::$enumData['methodMap'] = Enumerator::get('methodMap');
         self::$enumData['destructiveMap'] = Enumerator::get('destructiveMap');
     }
     $this->position = 0;
     $this->data = is_array($defaults) ? $defaults : array_filter(func_get_args());
 }
Esempio n. 3
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;
 }
Esempio n. 4
0
 public function testNonDestructiveFillReturns()
 {
     $records = array('John', 'Sallie', 'Jane');
     $return = Enumerator::fill($records, 'x');
     $this->assertEquals(array('x', 'x', 'x'), $return);
 }