Есть такая функция, которая разбивает строку на части заданной длинны:
function split($str, $len = 5) {
$arr = [];
$length = mb_strlen($str, 'UTF-8');
for ($i = 0; $i < $length; $i += $len)
{
$arr[] = mb_substr($str, $i, $len, 'UTF-8');
}
return $arr;
}
На выходе получается массив состоящий из строк длинною до 5 символов.
Нужно модифицировать функцию таким образом, чтобы одним из условий переноса был символ новой строки /n. Тоесть, перенос совершается в рамках 5 символов, но если встречается знак переноса, делаем разбитие в этом месте. Это нужно чтобы перенос по возможности не рвал слова на части
Те, если исходная строка имеет вид,
$str = '12345/n9101111/n2';
на выходе должно получаться:
1=>12345 (5)
2=>678/n (4)
3=>91011 (5)
4=>11/n (3)
5=>2 (1)
Уточнение: Например есть строка длинною 150 символов, ее нужно разбить на блоки максимальной длинною 50 символов, в строке встречаются переносы на новую строку. Задача разбить строку на такое количество блоков максимальной длинной 50 символов чтобы как можно меньше "разрывать" слова по возможности разбивая блоки на местах переноса строки, пусть они будут и короче 50 символов. Но в случае если переносы строки не встречаются, то разбивать на последнем пробеле. Ну или если уж нет пробелов, то тогда разбивать на 50-м символе. Скриншот тут иллюстрирует проблему i.stack.imgur.com/EqfmR.jpg
function chunk_split_unicode($str, $l = 5, $e = "\r\n", $last = FALSE) {
$tmp = array_chunk(preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $l);
$res = [];
$count = (count($tmp) - 1);
foreach ($tmp as $k => $t) {
$res[] = (($count != $k) OR ($last)) ? implode('', $t) : implode('', $t) . $e;
}
return $res;
}
function new_split($str, $len = 5) {
$arr = [];
$str = explode(PHP_EOL, $str);
$count = (count($str) - 1);
foreach ($str as $k => $value) {
$arr = array_merge($arr, chunk_split_unicode($value, $len, PHP_EOL, ($count != $k) ? FALSE : TRUE));
}
return $arr;
}
$str = '12345678
9101111
2';
var_dump(new_split($str));
$str = "12345\n9101111\n2";
preg_match_all('~.{1,5}\n?~', $str, $m);
$ret = array_map(function($s){ return rtrim($s, "\n"); }, $m[0]);
var_dump($ret);
Возвращает
array(4) {
[0]=>
string(5) "12345"
[1]=>
string(5) "91011"
[2]=>
string(2) "11"
[3]=>
string(1) "2"
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Вообщем такая проблема, есть проект на yii2 там есть категории с бесконечной вложенностью и такая задача вывести все товары из данной под категории...
Не удается спарсить данные с https://anistarme/
Нужно отформатировать номер телефона в формате +XXX-YYY-ZZZZZZ и распределить по аргументам номера страны, региона и области, при этом номера между...
Здраствуйте, при написании кода на OpenGL, у меня возникла проблема с файлом gluth