Есть скрипт
function pc_permute($items, $perms = array( )) {
if (empty($items)) {
$return = array($perms);
} else {
$return = array();
for ($i = count($items) - 1; $i >= 0; --$i) {
$newitems = $items;
$newperms = $perms;
list($foo) = array_splice($newitems, $i, 1);
array_unshift($newperms, $foo);
$return = array_merge($return, pc_permute($newitems, $newperms));
}
}
return $return;
}
$value = array(3, 4, 5, 6, 7, 8, 9, 10, 11);
$combs = pc_permute($value);
$count = 0;
foreach ($combs as $comb) {
$x1 = $comb[0]*$comb[1]*$comb[2];
$x2 = $comb[0]*$comb[3]*$comb[2];
$y1 = $comb[3]*$comb[4]*$comb[5];
$y2 = $comb[1]*$comb[4]*$comb[7];
$z1 = $comb[6]*$comb[7]*$comb[8];
$z2 = $comb[2]*$comb[5]*$comb[8];
if ($x1 == $x2 && $y1 == $y2 && $z1 == $z2) {
$count++;
echo implode($comb);
}
}
Он работает именно так как мне нужно, менять в нем ничего не хочу, но если он принимает большой массив то он не работает. С маленькими же все в порядке, понятное дело что в маленьком комбинаций порядка несколько сотен, а в больших уже доходит до миллиона. Как решить эту проблему может быть в php_ini можно снять какое то ограничение?
PHP
Есть ли какой-нибудь тайм аут на работу времени функции в php?
Можно изменить значение max_execution_time.
Параметр max_execution_time в php.ini (задается в секундах).
В рантайме можно переопределить значение этого параметра, используя ini_set('max_execution_time', <время_с>) - будет действовать только на текущий скрипт пока он выполняется, при этом значение в ini не изменится.
_
Когда скрипты выполняются слишком долго, лучше менять не настройки, а код (или реализацию, или сам подход к решению задачи). Я вижу в тексте вопроса то что не хотите менять, но дело не в желаниях, а здравом смысле.
Потому что во-первых, это фактически DoS уязвимость; и во-вторых, для таких скриптов потребуется выделенный сервер (если же будете такие скрипты выполнять на шаред или впс хостинге - Вас очень быстро забанят, это 100%).
В рантайме можно переопределить значение этого параметра, используя ini_set('max_execution_time', <время_с>) - будет действовать только на текущий скрипт пока он выполняется, при этом значение в ini не изменится.
_
Когда скрипты выполняются слишком долго, лучше менять не настройки, а код (или реализацию, или сам подход к решению задачи). Я вижу в тексте вопроса то что не хотите менять, но дело не в желаниях, а здравом смысле.
Потому что во-первых, это фактически DoS уязвимость; и во-вторых, для таких скриптов потребуется выделенный сервер (если же будете такие скрипты выполнять на шаред или впс хостинге - Вас очень быстро забанят, это 100%).
эти ограничения выставляются на сервере хостером
Я прокрутил ваш скрипт в пошаговом режиме (дебаг). Так вот, он после всех рекурсий формирует двумерный массив 362880х9, то есть 9! = 362880 (тут 9 это количество элементов входного массива). 10 элементов на входе это уже на выходе массив из 10! = 3628800 элементов, каждый содержит массив по 10 элементов. А 20 элементов превышает 2432902008000000000 элементов массива. Тут и памяти-то не хватит держать столько информации... К тому же ваша функция работает рекурсивно. Считайте, что результат каждого вызова функции хранится отдельно).
К примеру, для 9 элементов входного массива, на каждый элемент совершается (9-1)! = 403200 рекурсивных вызовов функции!
Так что я сомневаюсь, что в таком виде кода вы сможете просчитывать большие массивы.
К примеру, для 9 элементов входного массива, на каждый элемент совершается (9-1)! = 403200 рекурсивных вызовов функции!
Так что я сомневаюсь, что в таком виде кода вы сможете просчитывать большие массивы.
Похожие вопросы
- Сколько по времени изучать язык php
- Пытаюсь парсить товары с магазина ДНС, но получаю всё время array(0) PHP
- Для чего нужны функции pack () и unpack () в PHP ?
- Задачка по PHP (Создание функции)
- Помогите с php кодом, плиз) хотел функцию транслитерации написать, только ошибка выходит и все :(
- В чём смысл функции chop в php?
- PHP Polling ChatGPT
- Как оптимизировать структуру сайта php. на готовом шаблоне
- PHP. Почему нельзя применять функцию count() к строкам? Ведь строка это тот же массив
- Не работает PHP include на хостинге