Необходимо по результату 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 работает иначе?
Подскажите, пожалуйста, в чем проблема?