@ 2015-12-23T23:42:37Z <?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 index($index): self {
return $this->map(function ($key, $value) use ($index) { return $value[$index]; });
}
public function property(string $property): self {
return $this->map(function ($key, $value) use ($property) { return $value->$property; });
}
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 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')
->index('foo')
->reindex()
//->keys()
->sprintf('(%s,%s)')
->implode('_');
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for 7.0.0 - 7.0.20 , 7.1.0 - 7.1.20 , 7.2.0 - 7.2.33 , 7.3.16 - 7.3.33 , 7.4.0 - 7.4.33 , 8.0.0 - 8.0.30 , 8.1.0 - 8.1.28 , 8.2.0 - 8.2.18 , 8.3.0 - 8.3.6 (0,BAR)_(1,BAZ) Output for 5.5.24 - 5.5.35 , 5.6.8 - 5.6.28 Warning: Unsupported declare 'strict_types' in /in/DFqU7 on line 1
Parse error: syntax error, unexpected ':', expecting ';' or '{' in /in/DFqU7 on line 8
Process exited with code 255 . preferences:dark mode live preview
149.35 ms | 402 KiB | 182 Q