function SortFreeStyleArray(&$src, $cmpIndexes) { if (!is_array($src) || !is_array($cmpIndexes) || count($cmpIndexes) <= 0 || count($src) <= 0) { return true; } $cmpFunctionText = ''; foreach ($cmpIndexes as $indexes => $order) { if (is_array($order)) { foreach ($src as $key => $data) { $indexArray = array(); $start = 0; $begin = strpos($indexes, '["', $start); $end = strpos($indexes, '"]', $start); while (!(false === $begin) && !(false === $end) && $end - $begin > 2) { $begin += 2; $indexArray[] = substr($indexes, $begin, $end - $begin); $start = $end + 2; $begin = strpos($indexes, '["', $start); $end = strpos($indexes, '"]', $start); } $ptr =& $src[$key]; $isFullPath = true; if (count($indexArray) > 0) { foreach ($indexArray as $indx) { if (array_key_exists($indx, $ptr)) { $ptr =& $ptr[$indx]; } else { $isFullPath = false; break; } } } if ($isFullPath) { $result = SortFreeStyleArray($ptr, $order); if (!$result) { return $result; } } } } else { $cmpFunctionText .= 'if( $a' . $indexes . ' < $b' . $indexes . ' ) return '; $cmpFunctionText .= 'DESC' == $order ? '1' : '-1'; $cmpFunctionText .= '; elseif( $a' . $indexes . ' > $b' . $indexes . ' ) return '; $cmpFunctionText .= 'DESC' == $order ? '-1' : '1'; $cmpFunctionText .= '; '; } } $cmpFunctionText .= 'return 0;'; $cmpFunction = create_function('$a,$b', $cmpFunctionText); return uasort($src, $cmpFunction); }
function GetBoardFromSite($queryParameters) { $result = array(); $result = CAirportBoard::GetOneBoardFromSite($queryParameters, "p=1&time2=24"); $result2 = CAirportBoard::GetOneBoardFromSite($queryParameters, "p=2&time2=24"); if (intval($result2["ERROR"]["CODE"])) { $result["ERROR"] = $result2["ERROR"]; } if (!intval($result["ERROR"]["CODE"])) { $result["AK_NAMES"] = array(); $result["AK_CODES"] = array(); $result["DEPARTURES"] = array(); $result["ARRIVALS"] = array(); $result["TERMINALS"] = array(); $result = CAirportBoard::AddFlightsToResult($result["HTML"], $result, "Пулково-1"); unset($result["HTML"]); $result = CAirportBoard::AddFlightsToResult($result2["HTML"], $result, "Пулково-2"); unset($result2); sort($result["AK_NAMES"]); sort($result["AK_CODES"]); sort($result["DEPARTURES"]); sort($result["ARRIVALS"]); sort($result["TERMINALS"]); // Сортируем рейсы по абсолютному времени вылета SortFreeStyleArray($result["FLIGHTS"], array('["TIME"]["PLANNED"]["DATETIME"]' => 'ASC', '["FLIGHT"]' => 'ASC')); //trace($result); } return $result; }