$str =" SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'zagolovok-dlya-rubriki-13022020' for key 'blog_categories_slug_unique' (SQL:bla-bla-bla........";
preg_match('/(^\sSQLSTATE.*)(\(SQL:)/', $str , $matches);
var_dump($matches[1]);
__toString
возвращает строку.__toString
$user = [
'id' => 1,
'name' => 'Ivan Ivanov',
'role' => 'developer',
'salary' => 100
];
$apiTemplatesSet1 = [
'/api/items/%id%/%name%',
'/api/items/%id%/%role%',
'/api/items/%id%/%salary%'
];
class Invoker
{
private $data;
public function __construct(array $data)
{
$this->data = $data;
}
public function __invoke(array $key): string
{
return $this->data[$key[1]];
}
}
$function = new Invoker($user);
$result = array_map(function ($key) use ($function)
{
return preg_replace_callback('#%(.*)%#isU', $function, $key);
}
, array_values($apiTemplatesSet1));
echo '<pre>' . print_r($result, true);
/**
* Производит заливку шаблона значениями из массива
*
* Литералы шаблона вида {<liter_1>.<liter_2>...} будут заменены на соотвествующие значения из массива
* $data[<liter_1>][<liter_2>]...
*
* @param $template Шаблон, содержащий литералы
* @param $data Массив значений для подстановки
* @return string Преобразованная строка
*/
public function fill_template($template, $data)
{
preg_match_all('/\{([A-Za-z0-9_\.]+)\}/u', $template, $match);
list($snippets, $fillers) = $match;
if (!empty($snippets)) {
$fillers = array_map(function($filler) use ($data) {
$keys = explode('.', $filler);
return $this->array_find($keys, $data);
}, $fillers);
return strtr($template, array_combine($snippets, $fillers));
}
return $template;
}
/**
* Рекурсивно ищет значение в массиве в порядке обозначенным $keys
*
* @param array $keys Массив ключей в порядке поиска их в массиве
* @param array $data Массив значений для поиска
* @param string $default Значение по умолчанию, если нет соответствующего значения в массиве
* @return mixed
*/
public function array_find($keys, $data, $default = '')
{
if (!is_array($data) || empty($keys)) return $data;
$key = current($keys);
return (isset($data[$key]))
? $this->array_find(array_slice($keys, 1), $data[$key], $default)
: $default;
}
$user = [
'id' => 1,
'name' => 'Ivan Ivanov',
'role' => 'developer',
'salary' => 100
];
fill_template('/api/items/{id}/{name}', $user); // /api/items/1/Ivan Ivanov
preg_match_all('/\{([A-Za-z0-9_\.]+)\}/u', $template, $match);
<?php
$user = [
'id' => 1,
'name' => 'Ivan Ivanov',
'role' => 'developer',
'salary' => 100
];
$apiTemplatesSet1 = [
'/api/items/%id%/%name%',
'/api/items/%id%/%role%',
'/api/items/%id%/%salary%'
];
print_r(str_replace(array_keys($user), array_values($user), str_replace("%", "", $apiTemplatesSet1)));
Array
(
[0] => /api/items/1/Ivan Ivanov
[1] => /api/items/1/developer
[2] => /api/items/1/100
)
Создать новостной портал с дизайном, адаптивной версткой и посадить все это дело на Drupal за 4000р.
Молодой гусар спрашивает у поручика Ржевского, как это ему удается пользоваться таким успехом у женщин.
- Очень просто, - отвечает он, - нужно подойти к женщине и сказать: "Мадам, позвольте вам впендюрить!" И все.
- Поручик! Но ведь за такое можно и по морде!
- Можно и по морде. Но обычно впендюриваю.