@venom1996

Как при каждой итерации подставлять значение массива?

$arFilterOplataPoSchetam = array("IBLOCK_ID" => "89", "ID" => $arProps['OPLATY_PO_SCHETAM']['VALUE'][0], ">=DATE_CREATE" => $minDate,
            "<=DATE_CREATE" => $maxDate,);

        $summaPlatejeiDolgNaDatu = 0;

        $resOplataPoSchetamDluaDolgNaDatu = CIBlockElement::GetList(
            array("DATE_CREATE" => 'ASC'),
            $arFilterOplataPoSchetam,
            false,
            array(),
            $arSelectOplataPoSchetam
        );


        while ($obOplataPoSchetamDluaDolgNaDatu = $resOplataPoSchetamDluaDolgNaDatu->GetNextElement()) {
            $arFieldsOplataPoSchetamDluaDolgNaDatu = $obOplataPoSchetamDluaDolgNaDatu->GetFields();
        }

в массиве $arProps['OPLATY_PO_SCHETAM']['VALUE'] может быть больше элементов, и мне нужно поставлять эти значения в $arFilterOplataPoSchetam в ID и итерировать, что бы распечатать весь массив по каждому элементу $arProps['OPLATY_PO_SCHETAM']['VALUE']
  • Вопрос задан
  • 18 просмотров
Пригласить эксперта
Ответы на вопрос 1
gromdron
@gromdron Куратор тега Битрикс24
Bitrix developer
Структурируйте пожалуйста ваш код, чтобы не было скачущих отступов.

Что касается задачи, если $arProps['OPLATY_PO_SCHETAM']['VALUE'] у вас содержится массив идентификаторов то это тоже сработает.
То есть, если у вас он имеет вид:
$arProps['OPLATY_PO_SCHETAM']['VALUE'] = [
    1,
    2,
    3,
    4
];


То вам достаточно заменить ваш фильтр на
$arFilterOplataPoSchetam = array(
    "IBLOCK_ID" => "89",
    "ID" => $arProps['OPLATY_PO_SCHETAM']['VALUE'],
    ">=DATE_CREATE" => $minDate,
    "<=DATE_CREATE" => $maxDate
);


Т.е. удалить "[0]"

Как только вы это сделаете, у вас вернется массив элементов, но в вашем коде в $arFieldsOplataPoSchetamDluaDolgNaDatu всегда будет 1 результат - последний.

Чтобы предотвратить это, нужно куда-то складывать результаты.
Например сделать так:
$debtsOnDate = [];

while ($obOplataPoSchetamDluaDolgNaDatu = $resOplataPoSchetamDluaDolgNaDatu->GetNextElement()) {
    $debtsOnDate[] = $obOplataPoSchetamDluaDolgNaDatu->GetFields();
}


А после того как это сделаете можно еще и ускорить весь цикл (убрав лишние запросы):
while ( $debtOnDate = $resOplataPoSchetamDluaDolgNaDatu->GetNext() )
{
    $debtsOnDate[] = $debtOnDate;
}


Ну и конечно же, если не предусматривается вывод пользователю (например нужен только подсчет), то можно заменить GetNext на Fetch метод.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы