Xpoint
   [напомнить пароль]

Множественные массивы

Метки: [без меток]
2009-06-15 08:37:20 [обр] tcolonel[досье]

Доброго времени суток всем гуру )

Есть проблемка, которую не могу решить, помогите пожалуйста. Есть набор записей из запроса к БД (массив вида):

Array(
[0]=>Array(
"ID"=>...,
"NAME"=>...,
"LASTNAME"=>...,
.....
)
[1]=>Array(
"ID"=>...,
"NAME"=>...,
"LASTNAME"=>...,
.....
)
[2]=>Array(
"ID"=>...,
"NAME"=>...,
"LASTNAME"=>...,
.....
)
...
)

на выходе должен получиться массив суммированный из этих записей.

Делаю из него выборку в цикле while. Вопрос: как суммировать массивы? array_merge не помогает, потому как строковые ключи одинаковые и каждый последующий массив не добавляется, а заменяется, + тоже не работает, если суммировать элементы массива по отдельности, то работает.
Пример:

$rs = запрос к бд;
while($fields = $rs->GetNextElement())
{
 $arFields = $fields->GetFields();
 $arFields_ = array_merge($arFields_, $arFields);
}

не работает, в итоге в $arFields_ записывается последний массив

$rs = запрос к бд;
while($fields = $rs->GetNextElement())
{
 $arFields = $fields->GetFields();
 $arFields_ = $arFields_ + $arFields;
}

не работает, в итоге в $arFields_ записывается первый массив

$rs = запрос к бд;
while($fields = $rs->GetNextElement())
{
 $arFields = $fields->GetFields();
 $arFields_[] .= $arFields["ID"];
}

работает, в итоге в $arFields_ получаю массив вида Array([0]=>ID1, [1]=>ID2, [2]=>ID3).

А нужно, чтобы у меня был массив вида:

Array(
[0]=>Array(
"ID"=>...,
"NAME"=>...,
"LASTNAME"=>...,
.....
)
[1]=>Array(
"ID"=>...,
"NAME"=>...,
"LASTNAME"=>...,
.....
)
[2]=>Array(
"ID"=>...,
"NAME"=>...,
"LASTNAME"=>...,
.....
)
...
)

Всем спасибо.

спустя 9 минут [обр] tcolonel[досье]

Если же брать по отдельности:

$i = 0;
$rs = запрос к бд;
while($fields = $rs->GetNextElement())
{
 $arFields = $fields->GetFields();
 $arFields_[$i]["ID"] .= $arFields["ID"];
 $arFields_[$i]["NAME"] .= $arFields["NAME"];
 ................
 $i++;
}

то все работает .... но, если этих полей 20, 30, 40 .... Что же, писать под каждое поле отдельно строку $arFields_[$i]["<fieldname>"] .= $arFields["<fieldname>"];?

спустя 1 час 4 минуты [обр] Филипп Ткачев(20/112)[досье]
array_push
$res_ar = array();
while($fields = $rs->GetNextElement())
{
 array_push($res_ar,$fields->GetFields());
}
спустя 7 минут [обр] Филипп Ткачев(20/112)[досье]
Вообще же нужно внимательнее читать справку по Битриксу.
Логичнее использовать CIBlockElement::GetList для получения всего массива разом.
спустя 4 часа 4 минуты [обр] tcolonel[досье]

Филипп Ткачев[досье]
Люди Битрикса всюду ))))

Ну хорошо, тогда вопрос уже задам по-другому:

if(CModule::IncludeModule("iblock"))
{   
 $arFields_ = Array();
 $IBLOCK_ID = 20;
 $arOrder = Array("id"=>"asc");
 $arFilter = Array("IBLOCK_ID"=>IntVal($IBLOCK_ID), "ID"=>$arUserReg, "ACTIVE"=>"Y");
 $arGroupBy = false;
 $arNavStartParams = false;
 $arSelectFields = Array("ID", "NAME");
 $res = CIBlockElement::GetList($arOrder, $arFilter, $arGroupBy, $arNavStartParams, $arSelectFields);
 $i = 0;
 while($ob = $res->GetNextElement())
 {
  $arFields = $ob->GetFields();
  $arElements[$i]["ID"] .= $arFields["ID"];
  $arElements[$i]["NAME"] .= $arFields["NAME"];
  $i++;
 }
}

Вот у меня в $res есть CIBlockResult Object, как из него получить суммарный массив элементов? Fetch() не помогает ...

спустя 3 часа 25 минут [обр] Филипп Ткачев(20/112)[досье]
А то что я выше написал разве не помогает? Или я не пойму вопрос?
спустя 8 часов [обр] tcolonel[досье]

Филипп Ткачев[досье]
Я понял в чем трабла была.

Есть массив:

Array
(
 [0] => Array([ID] => 1, [PROPERTY_1_VALUE] => Array([0] => 1, [1] => 2, [2] => 3))
 [1] => Array([ID] => 1, [PROPERTY_1_VALUE] => Array([0] => 1, [1] => 2, [2] => 3))
 [2] => Array([ID] => 1, [PROPERTY_1_VALUE] => Array([0] => 1, [1] => 2, [2] => 3))
 [3] => Array([ID] => 2, [PROPERTY_2_VALUE] => Array([0] => 4, [1] => 3))
 [4] => Array([ID] => 2, [PROPERTY_2_VALUE] => Array([0] => 4, [1] => 3))
 [5] => Array([ID] => 3, [PROPERTY_3_VALUE] => Array([0] => 5))
)

Как из него получить массив вида:

Array
(
 [0] => Array([ID] => 1, [PROPERTY_1_VALUE] => Array([0] => 1, [1] => 2, [2] => 3))
 [1] => Array([ID] => 2, [PROPERTY_2_VALUE] => Array([0] => 4, [1] => 3))
 [2] => Array([ID] => 3, [PROPERTY_3_VALUE] => Array([0] => 5))
)

Спасибо.

спустя 9 часов [обр] Алексей Севрюков(162/1280)[досье]
tcolonel[досье] Если эти данные Вы вытаскиваете из базы, то почему бы не воспользоваться группировкой, чтобы сразу получить необходимый результат?
спустя 3 часа 58 минут [обр] tcolonel[досье]
Алексей Севрюков[досье]
Если Вы говорите про параметр arGroupBy то я его использовал: $arGroupBy=array("PROPERTY_1") - не помогает, записи при выборке дублируются.
спустя 3 часа 31 минуту [обр] Алексей Севрюков(162/1280)[досье]
tcolonel[досье] я про группировку в самой БД, на уровне SQL.
спустя 3 часа 21 минуту [обр] Филипп Ткачев(20/112)[досье]

Алексей Севрюков[досье], d Битриксе написан специальный wrapper для SQL запросов.

tcolonel[досье],

$arGroupBy = array("ID");
Powered by POEM™ Engine Copyright © 2002-2005