php gmp разбить строку на числа не больше указанного числа - очень большие числа произвольной величины
Primary tabs
предлагаю решение в таком виде ( решение без gmp доступно здесь = http://fkn.ktu10.com/?q=node/4235):
/*
ВНИМАНИЕ: так как для данной функции подразумевается
возможность работы с очень большими числами,
то в ней для арифметических операций будет использовать
стадартное php-расширение для работы с такими вот большими числами -
php gmp
данная функция принимает строку $str
из одних цифр и разбивает её на блоки - числа,
каждое из которых не больше заданного $n
(подразумевается ,что $n должно быть достаточно большим-
то есть, вообще говоря больше чем любая цифра - т.е. >9)
возвращаемый массив - содержит строки
- дабы сохранить совместимость с внешним кодом*/
function get_blocks_array($str, $n)
{
$rarr = array();// массив чисел (результат)
$arr = str_to_arr($str);
$block = '';// строка для хранения очередного блока(числа)
foreach ($arr as $value)
{
$block .= $value; // приклеиваем очередной символ
if (gmp_cmp($block, $n) > 0) {
$block = gmp_div_q($block, 10);// тогда убираем один разряд = $value (делим без остатка)
$rarr[] = gmp_strval($block); // добавляем число в массив (в виде строки)
$block = ''; // обнуляем блок
$block .= $value;// добавляем последний элемент, который не вошёл в предыдущий блок
}
}
if ($block != '') // если что-то осталось
$rarr[] = $block;
// можно вывести на экран, то что получилось
echo "<br> строка = ".$str;
echo "<br> n = ".$n;
foreach($rarr as $val)
{
echo '<br>';
echo '<br>'.$val;
}
return $rarr;
}
- Log in to post comments
- 3614 reads