Необходимо по результату GetList'а (код ниже) пройтись дважды. Я понимаю, что в большинстве ситуаций можно и нужно обходиться без этого, делая все в один обход. Но это именно тот случай, где так делать не оптимально. (По-крайней мере мне не представляется возможным).
Код |
---|
$arSelect = array(
"ID", "LID", "IBLOCK_ID", "IBLOCK_SECTION_ID", "NAME",
"PREVIEW_PICTURE", "DETAIL_TEXT", "DETAIL_TEXT_TYPE", "DETAIL_PICTURE", "LANG_DIR", "DETAIL_PAGE_URL",
"CATALOG_AVAILABLE", "CATALOG_WEIGHT", "TAGS"
);
$filter = getBaseStoreIds();
$filter['IBLOCK_ID'] = $IBLOCK_ID;
$filter['>=CATALOG_PRICE_2'] = 500;
$filter["!PROPERTY_BRAND"] = false;
$filter["!PREVIEW_PICTURE"] = false;
$filter["ACTIVE"] = "Y";
$filter["ACTIVE_DATE"] = "Y";
$res = CIBlockElement::GetList(array('ID' => 'ASC'), $filter, false, false, $arSelect);
|
Ответа на вопрос "как после окончания прохода по результатам выборки с помощью fetch или getNextElement/getNext сдвинуть указатель обратно на начало выборки" не нашел, да и сомневаюсь что он имеется. Поэтому попробовал клонировать $res, но вывод второго массива пустой.
Код |
---|
$res2 = clone $res;
$arIdToProduct = [];
$arIdToProduct2 = [];
while($product = $res->Fetch()) {
$arIdToProduct[$product['ID']] = $product;
}
while($product2 = $res2->Fetch()) {
$arIdToProduct2[$product2['ID']] = $product2;
}
var_dump($arIdToProduct);
var_dump($arIdToProduct2); |
Может быть clone для объекта типа CIBlockResult работает иначе?
Подскажите, пожалуйста, в чем проблема?