public function options() { $options = ['robots' => ['index,follow', 'noindex,follow', 'index,nofollow', 'noindex,nofollow'], 'state' => ['dynamic', 'static'], 'priority' => for_all(range(0.1, 0.9, 0.1), function ($item) { return str_replace(".", ",", $item); }), 'frequency' => ['always', 'hourly', 'daily', 'weekly', 'monthly', 'yearly', 'never']]; $out = new Collection(); foreach ($options as $attr => $values) { $out->offsetSet($attr, array_copy_key($values)); } return $out; }
/** * Применение callback функции к каждому элементу массива, который является строкой или просто строке * Всем переменным не являющимися массивом или строкой, будет присвоено значение null * * @param mixed $data Строка или массив с данными * @param Closure $callback callback функция * @return mixed */ function for_all($data, Closure $callback) { switch (true) { case is_array($data): foreach ($data as &$val) { $val = for_all($val, $callback); } break; case is_scalar($data): $data = $callback($data); break; default: $data = null; } return $data; }
/** * Нормализация имен * Иванов-петров => Иванов-Петров * * @param string $name обрабатываемая строка * @return string */ function normalize_name($name) { return for_all($name, function ($name) { $name = ucwords(strtolower($name)); foreach (array('-', "'") as $delimiter) { if (strpos($name, $delimiter) !== false) { $name = implode($delimiter, array_map('ucfirst', explode($delimiter, $name))); } } return $name; }); }