Отфильтровать массив с помощью PHP

У меня есть такой массив:

Array
(
    [0] => Array
        (
            [DEB_Date] => 2018-01-06
            [DEB_Total] => 100.00
            [DEB_Nb_Days] => 181
        )
    [1] => Array
        (
            [DEB_Date] => 2018-07-06
            [DEB_Total] => 100.00
            [DEB_Nb_Days] => 0
        )
)

Я хочу иметь своего рода отчет в зависимости от DEB_Nb_Days.

Итак, мой сценарий следующий:

// Init the array
$arr['0_to_30']['DEB_Total'] = 0;
$arr['31_to_60']['DEB_Total'] = 0;
$arr['61_to_90']['DEB_Total'] = 0;
$arr['91_to_120']['DEB_Total'] = 0;
$arr['121_and_more']['DEB_Total'] = 0;

// Loop between the debtors
foreach($debtors as $debtor){
    if ($debtor['DEB_Nb_Days'] >= 0  || $debtor['DEB_Nb_Days'] <= 30) { $arr['0_to_30']['DEB_Total'] += $debtor['DEB_Total']; }
    if ($debtor['DEB_Nb_Days'] >= 31 || $debtor['PAY_Nb_Days'] <= 60) { $arr['31_to_60']['DEB_Total'] += $debtor['DEB_Total']; }
    if ($debtor['DEB_Nb_Days'] >= 61 || $debtor['PAY_Nb_Days'] <= 90) { $arr['61_to_90']['DEB_Total'] += $debtor['DEB_Total']; }
    if ($debtor['DEB_Nb_Days'] >= 91 || $debtor['PAY_Nb_Days'] <= 120) { $arr['91_to_120']['DEB_Total'] += $debtor['DEB_Total']; }
    if ($debtor['PAY_Nb_Days'] >= 121) { $arr['121_and_more']['DEB_Total'] += $debtor['DEB_Total']; }
}

У меня должно получиться вот что:

$arr['0_to_30']['DEB_Total'] = 100;
$arr['31_to_60']['DEB_Total'] = 0;
$arr['61_to_90']['DEB_Total'] = 0;
$arr['91_to_120']['DEB_Total'] = 0;
$arr['121_and_more']['DEB_Total'] = 100;

Но на самом деле результат такой:

$arr['0_to_30']['DEB_Total'] = 200;
$arr['31_to_60']['DEB_Total'] = 200;
$arr['61_to_90']['DEB_Total'] = 200;
$arr['91_to_120']['DEB_Total'] = 200;
$arr['121_and_more']['DEB_Total'] = 0;

Что мне здесь не хватает, пожалуйста?

Спасибо.

Возможно изменение || к &&

Nigel Ren 06.07.2018 21:20
$debtor['DEB_Nb_Days'] >= 31 || $debtor['PAY_Nb_Days'] <= 60 Вы должны использовать &&, а что такое PAY_Nb_Days? Включите отчеты об ошибках, чтобы получать уведомления о неопределенных индексах.
Devon 06.07.2018 21:20

Все ваши условия «ИЛИ» (||) должны быть условиями «И» (&&)

random_user_name 06.07.2018 21:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете реструктурировать набор условий if, чтобы сначала искать наивысшие, а затем использовать else, чтобы уменьшить количество сравнений ...

foreach ($debtors as $debtor) {
    if ($debtor['DEB_Nb_Days'] >= 121) {
        $arr['121_and_more']['DEB_Total'] += $debtor['DEB_Total'];
    } 
    else if ($debtor['DEB_Nb_Days'] >= 91) {
        $arr['91_to_120']['DEB_Total'] += $debtor['DEB_Total'];
    } 
    else if ($debtor['DEB_Nb_Days'] >= 61) {
        $arr['61_to_90']['DEB_Total'] += $debtor['DEB_Total'];
    } 
    else if ($debtor['DEB_Nb_Days'] >= 31) {
        $arr['31_to_60']['DEB_Total'] += $debtor['DEB_Total'];
    } 
    else {
        $arr['0_to_30']['DEB_Total'] += $debtor['DEB_Total'];
    }
}

(Это также исправляет то, что в некоторых случаях вы используете PAY_Nb_Days вместо DEB_Nb_Days).

Другие вопросы по теме