компилятор ругается

попытался решить задачу не получилось, компилятор ругается,условия задачи: Создайте функцию с названием countBasket, с одним параметром - массив позиций в корзине.

Функция должна посчитать и вернуть сколько всего в корзине товаров (в одной позиции корзины может быть несколько товаров - поле quantity).

В вашу функцию будут передавать массив следующей структуры:

task_1_08.png количество позиций в корзине может быть от 0 до 10

function countBasket($array = []): int
{
    $total = 0;
 
    foreach ($array as $value) {
        if ($value['quantity'] < 10) {
            $total += $value['quantity'];
        }
    }
 
    return $total;
}
 
$basket = [
    [
        'position' => 'книга по php',
        'quantity' => 1,
    ],
    [
        'position' => 'Мышь беспроводная',
        'quantity' => 12,
    ],
];
 
echo countBasket($basket);

Ошибка: Критическая ошибка выполнения кода: Return value of __PHPSandbox_b1b852e9972fcd749c8b2ba12169366e\countBasket() must be of the type integer, none returned


Ответы (1 шт):

Автор решения: Ivan Dudarev

Ваш код, но уже отформатирован:

<?php

function countBasket($array = []): int
{
    $total = 0;
    foreach ($array as $value) {
        if ($value['quantity'] < 10) {
            $total += $value['quantity'];
        }
        return $total;
    }
}

И вот, сразу видно, что:

  1. При пустом входящем массиве функция ничего не вернёт
  2. Функция возвращает не общее количество элементов, а количество первого элемента, меньшее 10 либо 0.

А так же, стоит заметить, что 10 по условию задачи тоже должно быть включено.

А теперь просто выносим строку return из цикла...

<?php

function countBasket($array = []): int
{
    $total = 0;
    foreach ($array as $value) {
        if ($value['quantity'] <= 10) {
            $total += $value['quantity'];
        }
    }
    return $total;
}

... и код становится рабочим!

PS. Вы зря недооцениваете важность форматирования кода, его не зря придумали и вводят стандарты...

→ Ссылка