<?php declare(strict_types = 1);
class Collection {
private $_items;
public function __construct(array $items = [])/*: void*/ {
$this->_items = $items;
}
public function filter(callable $callback): self {
foreach ($this->_items as $key => $value)
if (!call_user_func($callback, $value))
unset($this->_items[$key]);
return $this;
}
public function map(callable $callback): self {
foreach ($this->_items as $key => $value)
$this->_items[$key] = call_user_func($callback, $key, $value);
return $this;
}
public function reindex(): self {
$this->_items = array_values($this->_items);
return $this;
}
public function sprintf(string $format): self {
return $this->map(function ($key, $value) use ($format) {
return substr_count($format, '%s') === 1 ? sprintf($format, $value) : sprintf($format, $key, $value);
});
}
public function keys(): self {
$this->_items = array_keys($this->_items);
return $this;
}
public function implode(string $delimiter = ''): string {
$output = '';
$first = TRUE;
foreach ($this->_items as $value)
if ($first) {
$output .= $value;
$first = FALSE;
} else
$output .= "$delimiter$value";
return $output;
}
public static function index($index): callable {
return function ($key, $value) use ($index) { return $value[$index]; };
}
public static function property(string $property): callable {
return function ($key, $value) use ($property) { return $value->$property; };
}
public function values(): array { return $this->_items; }
}
class Filter {
public static function not(callable $callback): callable {
return function ($value) use ($callback) { return !call_user_func($callback, $value); };
}
}
echo (new Collection([
42,
'one',
'two',
['foo' => 'BAR'],
'three',
['foo' => 'BAZ'],
]))
->filter(Filter::not('is_string'))
->filter('is_array')
->map(Collection::index('bar'))
->reindex()
//->keys()
//->sprintf('(%s,%s)')
->implode('_');
- Output for git.master, git.master_jit, rfc.property-hooks
- Warning: Undefined array key "bar" in /in/d2aeG on line 44
Warning: Undefined array key "bar" in /in/d2aeG on line 44
_
This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.
Active branches
Archived branches
Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page
preferences:
85.8 ms | 401 KiB | 8 Q