Вход

Просмотр полной версии : Сортировка многомерного массива


mcavalon
31.01.2012, 17:37
Добрый день!

Помогите пожалуйста отсортировать многомерный массив $PLACEMARKS следующего вида

$PLACEMARKS = array();
$i=0;
foreach($arResult["ITEMS"] as $arItem)
{
if ($arItem["PROPERTIES"]["GOOGLE_MAP"]["VALUE"]!=""){
$MAP = explode (",", $arItem["PROPERTIES"]["GOOGLE_MAP"]["VALUE"]);
$TEXT = "<a href=".$arItem["DETAIL_PAGE_URL"].">".$arItem["NAME"]."</a>";
$PLACEMARKS[$i]["X"] = $MAP[0]; //Заполняем массив маркера данными
$PLACEMARKS[$i]["Y"] = $MAP[1]; //
$PLACEMARKS[$i]["NAME"] = $arItem["NAME"]; //
$PLACEMARKS[$i]["COUNTRY"] = $arItem["DISPLAY_PROPERTIES"]["COUNTRY"]["VALUE"];
$PLACEMARKS[$i]["YEAR"] = $arItem["DISPLAY_PROPERTIES"]["YEAR"]["VALUE"];
//получим значения пользовательских полей раздела
$sUFCode="UF_".strtoupper($arItem["PROPERTIES"]["ETAP"]["VALUE_XML_ID"])."_ICON";
$arSelect = array("$sUFCode");
$sectionResult = CIBlockSection::GetList(array("SORT" => "ASC"), array("IBLOCK_ID"=> $arResult["ID"], "ID" =>$arItem["IBLOCK_SECTION_ID"]), false, $arSelect);
while ($sectionProp = $sectionResult -> GetNext()) {
$iFileId=$sectionProp[$sUFCode];//id файла иконки для карты
$PLACEMARKS[$i]["ICO"]=CFile::GetPath($iFileId);
}
$PLACEMARKS[$i]["URL"] = $arItem["DETAIL_PAGE_URL"];
$str = str_replace("\n"," ",$arItem["PREVIEW_TEXT"]);
$str = strip_tags($str);
$PLACEMARKS[$i]["TEXT"] ="<a href=".$arItem["DETAIL_PAGE_URL"]." style=\"color: #555555; font-family: Arial,Helvetica,sans-serif; font-size: 12px; text-decoration: none\">".$str."</a>";
//получим название раздела
$arIBlockSection = GetIBlockSection($arItem["IBLOCK_SECTION_ID"]);
$sSectionName = $arIBlockSection["NAME"];
unset($arIBlockSection);
$PLACEMARKS[$i]["SECTION"] = $sSectionName;
$PLACEMARKS[$i]["IMG"]=$arItem["PREVIEW_PICTURE"]["SRC"];
}
$i++;
}

reset($PLACEMARKS);

по полю $PLACEMARKS[$i]["YEAR"]

melky
01.02.2012, 02:06
не уверен, но вроде так :

uasort($PLACEMARKS, function($a, $b){ $a=$a["YEAR"];$b=$b["YEAR"]; return ($a==$b) ? 0 :(($a>$b) ? 1:-1 ) });

InSys
01.02.2012, 10:22
впринципе по мимо примера выше, можно извернутся через
array_multisort (http://www.php.net/manual/ru/function.array-multisort.php)

Да и вообще все возможные варианты сортировки см. тут:
Сортировка многомерных массивов по ключу на PHP (http://intsystem.org/480/sortirovka-mnogomernyh-massivov-po-klyuchu-na-php/)

InSys
08.02.2012, 23:01
Что-то стала мне интересна эта тема. В итоге провел тесты всех способов, и оказалось что array_multisort работает быстрее на порядок. Добавил результаты в обзор по ссылке выше.