Короче, нам задали рекурсивную функцию. Я вообще не понимаю, нах... начерта мне этот $level. Как он вообще может влиять на значение $array? Он вообще что-то значит. Плюс как меняются и подсчитываются значения переменных $count и $array. ЧТО ЭТООО?
function sum($array, $level = 0) {
static $count; //$count = null (0)
static $items; //$items = null (0)
if (is_array($array)) {
$level++; //level = 0, level = 1.
foreach ($array as $element);
sum($element, $level);
}
else {
$count++;
$items += $array;
}
return array('count' => $count, 'items' => $items);
}
$result = sum($array);
print_r($result);
PHP
СРОЧНО! ЧТО ВЫПОЛНЯЕТ ЭТОТ PHP КОД?
В данном случае $level действительно ни на что не влияет и совершенно не нужна (она необходима только в том случае, когда нужно проверять уровень вложенности рекурсии). Эталонный говонокод, написанный полным ламером.
$count и $item - static. Т. е. они сохраняют свои значения между вызовами sum. Потому рассматривай их как глобальные переменные, видимые только внутри функции sum.
Такое ощущение, что кто-то бездумно скопипастил кусок кода, а потом крайне тупо изменил его под более простую задачу - вообще не разбираясь в смысле конструкций исходного кода.
function sum($data) {
if (is_array($data)) {
$result = ['count' => 0, 'items' => 0];
foreach($data as $row) {
$sub = sum($row);
$result['count'] += $sub['count'];
$result['items'] += $sub['items'];
}
return $result;
} else {
return ['count' => 1, 'items' => $data];
}
}
$count и $item - static. Т. е. они сохраняют свои значения между вызовами sum. Потому рассматривай их как глобальные переменные, видимые только внутри функции sum.
Такое ощущение, что кто-то бездумно скопипастил кусок кода, а потом крайне тупо изменил его под более простую задачу - вообще не разбираясь в смысле конструкций исходного кода.
function sum($data) {
if (is_array($data)) {
$result = ['count' => 0, 'items' => 0];
foreach($data as $row) {
$sub = sum($row);
$result['count'] += $sub['count'];
$result['items'] += $sub['items'];
}
return $result;
} else {
return ['count' => 1, 'items' => $data];
}
}
Niki12 Moroz
Вы просто рафаело вместо тысячи слов! Спасибо огромное!
Тяжелый случай.
Если не заметил у тебя функция вызывает саму себя, ну или должна была делать это.
$level - это уровень вложенности запросов.
Но, учитывая, что в данном случае $element не является массивом,
то функция ни разу сама себя не вызовет.
Или часть кода пропущена, или не знаю, что это должно было делать...
В данном случае просто выдаст
Array
(
[count] => 1
[items] => 0
)
И вот это, что должно было делать не понятно, подозреваю, что тут точка с запятой не к месту.
foreach ($array as $element);
А $level скорее всего планировалось использовать для ограничения кол-ва уровней вложенности вызова функции.
Если не заметил у тебя функция вызывает саму себя, ну или должна была делать это.
$level - это уровень вложенности запросов.
Но, учитывая, что в данном случае $element не является массивом,
то функция ни разу сама себя не вызовет.
Или часть кода пропущена, или не знаю, что это должно было делать...
В данном случае просто выдаст
Array
(
[count] => 1
[items] => 0
)
И вот это, что должно было делать не понятно, подозреваю, что тут точка с запятой не к месту.
foreach ($array as $element);
А $level скорее всего планировалось использовать для ограничения кол-ва уровней вложенности вызова функции.
Похожие вопросы
- Помогите с PHP кодом! Где косяк?
- Структура PHP кода
- При написании php кода для отправки записи в базу данных выходит ошибка
- Помогите с php кодом, плиз) хотел функцию транслитерации написать, только ошибка выходит и все :(
- Допиливать самописный движок на PHP, код к которому писали 14 лет - стоит ли соглашаться на такую работу?
- Как заменить html код с помощью php файла.
- Изучаю php. В книжке дан код программы, объясните для чего строка? (код внутри)
- Помогите с кодом PHP
- Что означает "%0A" в коде php?
- PHP Polling ChatGPT