Разделение строки на равные части

185
17 января 2021, 23:10

Я сделал сделал разделение строки на равные части с хвостом:

function chunk($text, $parts) {
    $partSize = strlen($text)/$parts;
    $tailSize = strlen($text)%$parts;
    $arr = [];
    for ($i = 0; $i < $parts; $i++) {
        array_push($arr, substr($text, $i*$partSize, $partSize));
    }
    // Хвост
    if ($tailSize != 0) {
        $end = substr($text, $parts*$partSize + 1, $tailSize);
        array_push($arr, $end);
    }
    return $arr;
}

Но всё же где-то в середине процесса начинают теряться символы. При использовании

json_encode(chunk('hellohellohello', 4))

Результат следующий:

Знаю, что скорее всего проблема здесь: $i*$partSize но не доходит =В

Answer 1

Так что ли?

$string = 'helloworld';
function array4me($string, $chunks)
{
    $array = str_split($string);
    $chunks = array_chunk($array, $chunks, false);
    $result = array();
    foreach ($chunks as $chunk)
    {
        $result[] = implode($chunk);
    }
    $result = implode(',', $result);
    return $result;
}
echo array4me($string, 4);

На выводе будет строка - hell,owor,ld

Answer 2

И используйте функции mb_strlen() и mb_substr(); для работы с многобайтными строками https://secure.php.net/manual/ru/book.mbstring.php

Answer 3

Всё же была моя ошибка: на месте strlen($text)/$parts получалось десятичное число, поэтому через пару циклов начинали пропадать буквы (я спутал с другим языком, где деление происходило нацело). Если вдруг у кого будет схожий вопрос, держите код (заранее извиняюсь, если плохо оптимизирован)

function chunked($text, $parts) {
    $partSize = floor(strlen($text)/$parts);
    $tailSize = strlen($text)%$parts;
    $arr = [];
    for ($i = 0; $i < $parts; $i++) {
        array_push($arr, substr($text, $i*$partSize, $partSize));
    }
    // Хвост
    if ($tailSize != 0) {
        $end = substr($text, $parts*$partSize, $tailSize);
        array_push($arr, $end);
    }
    return $arr;
}
READ ALSO
Кто знаком с phpQuery?

Кто знаком с phpQuery?

Есть много одинаковых классов, и она все парсятся нормально, выходит 100 классов, но когда я с этих классов парсю href то парсит только только...

98
Проблемы с функцией array_search

Проблемы с функцией array_search

Есть код php, который не пропускает формат jpeg, в чем проблема я уже понял, когда он находит формат jpeg в массиве, возвращает true и следом порядковый...

127
как открыть web приложение java через wildfly

как открыть web приложение java через wildfly

довольно стыдно это признавать, но не могу разобраться с wildflyЯ создал простенькое web приложение на java, чтобы проверить как работает wildfly, но он открывает...

81