PHP 5 для начинающих |
Страница 629 из 813 Другая полезная функция необходима для преобразования N-мерных массивов в одномерные: public static function arrayNth ($a, $n) { $out = array(); foreach ($a as $item) { $out[$item[$n]]=$item[$n]; } return $out; } Так как данные внутри приложения желательно представлять в виде массивов, следующая функция является особенно полезной. Она принимает запрос и помещает его результат в массив: public static function queryToMultidimArray ($db, $sql) { $out = array(); $query = LogUtils::executeQuery ($db, $sql); if ( !$query ) { throw new MultiLogDatabaseQueryException ($sql); } while ($row = LogUtils::getQueryArray($query)) { array_push ($out, $row); } return $out; } В файл для удобства включены две функции. Первая из них возвращает массив всех имеющихся в базе данных сайтов, а вторая возвращает все уникальные разделы (или demo_ids): public static function gatherSites ($db) { return LogUtils::queryToMultidimArray( $db, "select distinct site_id from user_log order by site_id"); } public static function gatherSections ($db) { return LogUtils::queryToMultidimArray( $db, "select distinct demo_id from user_log order by demo_id"); } Одной из главных функций, которыми необходимо обеспечить этот класс, является функция, открывающая SQLite-базы данных. Приведенный ниже код предназначен именно для этого. (Функция возвращает одно из нестандартных исключений Multi-logOpenDatabaseException() , если во время доступа к базе данных возникла какая-либо проблема): public static function openDatabase () { $db = sqlite_popen($GLOBALS['dbpath'].$GLOBALS['dbname'], 0666, $err); if ( !$db ) { throw new MultiLogOpenDatabaseException (); } return $db; } |