db:
image: "mariadb"
environment:
MYSQL_ROOT_PASSWORD: "mysqlpass"
volumes:
- ./backup:/docker-entrypoint-initdb.d
- ./dbdata:/var/lib/mysql
expose:
- 3306
const EPSILON = 0.0001;
if ( abs( $a['data']['stats']['point'] -$b['data']['stats']['point'] ) < EPSILON ) ... // equals
[img]...[/img][img]...[/img] остальное под спойлером: [img]...[/img][img]...[/img][img]...[/img]и ожидать, что получится красиво.
<?php
function spoilerToMsg(string $text, int $limit = 2): string
{
$innerLimit = 2 * $limit;
/*
* тут у нас совпадение: из-за того, что нумерация внутри массива идёт с 0,
* индекс последней части равен $innerLimit
*/
$lastIndex = $innerLimit;
/*
* по умолчанию поиск не жадный
*/
$pattern = '#(' . preg_quote('[img]', '#') . '.*' . preg_quote('[/img]', '#') . ')#uU';
$parts = preg_split($pattern, $text, $limit+1, PREG_SPLIT_DELIM_CAPTURE);
echo "limit: {$limit}, parts: ".count($parts)."\n";
if (
count($parts) > $innerLimit
&& strpos($parts[$lastIndex], '[img]') !== false
// не очень правильно, надо бы именно обёрнутость проверять
&& strpos($parts[$lastIndex], '[/spoiler]') === false)
{
$parts[$lastIndex] = '[spoiler title="Остальной контент здесь"]' . $parts[$lastIndex] . '[/spoiler]';
}
return implode('', $parts);
}
$test = '[img]bmPAy_E5rHs.jpg[/img] и ';
$prefix = "Здесь немного текста для начала. ";
for( $limit = 0; $limit < 5; $limit++ ) {
for ( $n = 0; $n < $limit + 3; $n++ ) {
echo "{$n}:\n";
$text = $prefix.str_repeat($test, $n);
echo spoilerToMsg($text, $limit), "\n";
}
echo "\n";
}
echo "done\n";