Эта тема на forum.dklab.ru


Markus: Выборка из нескольких массивов
Привет всем!
Такое дело.
На сайте есть архив программ. Программы распределены по категориям.
Вся база хранится в php файлах.
Есть файл базы data/allcat.php.
База каждой категории находится в своей дирректории cat1, cat2, cat3, cat4, cat5 и т.д..
В это дире находятся файлы информации о прогах, с именами 1.php, 2.php, 3.php, 4.php, 5.php и т.д., в которых содержится вся полная инфа о программе в виде массива.
Также в каждой дире есть файл infoall.php в которой содержится информация о всех прогах данной категории в виде массива,
с указанием для каждой проги, названия проги, последние отзывы, кол-во закачек, кол-во просмотров инфы о проге а ключ масива с данными
этой проги является номером файла информации, то есть если ключ - 4 то это файл 4.php.
В файле data/allcat.php содержится инфа в виде массива, о каждой категории; последня прога добавленная в категорию, количество прог и т.д.
А ключ массива с инфой о категории есть номер категории, то есть если ключ -7 то вся база этой категории находится в дире cat7 .
Я хочу сделать что то вроде списка популярных программ по скачиванию.
Я так подумал, и решил что сначала надо бы (как бы) проиндексировать, пробежаться по всем файлам и создать отдельный файл базы с информацией
о 10 (например) популярных программ. В базе должна быть инфа об id номере категории, id номере файла информации проги, название проги и кол-ва. закачек.
А у же потом при скачивании той или иной проги я буду изменять эту базу.
Мои мысли по поводу того как это реализовать "индексацию" (прошу прощения может неправильно обозвал действие).
1. Открыть data/allcat.php вытащить от туда id категории.
2. Поочередно открыть каждую категорию согласно данным вытащенным из data/allcat.php.
3. Вытащить из infoall.php нужную мне инфу.
4. Объеденить всю полученную инфу в один массив.
5. Отсортировать его в порядке убывания по значению кол-ва закачек.
6. Выбрать 10 (например) первых элементов этого объединенного масива.
7. Записать полученные данные в виде масива в файл hot.php (например).

Первые два пункта получается сделать. А вот дальше ........ проблема. Ничего не получается......
Вернее я не знаю как это сделать!
Подскажите пожалуйста как это реализовать!
Или намекните хотя бы. :)
Заранее признателен за помощь чайнику!
7.3.:
Подскажите пожалуйста как это реализовать!
С помощью базы данных. А иначе получаются вот такие ужастики. :)
Дмитрий Котеров:
http://php.net/include посмотрите.
Markus:
Дмитрий Котеров:
Ну вообщем я объединил несколько масивов в один многомерный.
Если я конечно правильно это называю....
Вообщем в одном масиве несколько масивов и у них одинаковые ключи.
Как мне можно отсортировать этот массив по конкретному ключу?
Дмитрий Котеров:
Одинаковых ключей в массиве быть не может.
Markus:
Дмитрий Котеров:
Может я не так выразился, я слабоват в пхп , а уж тем более в ее терминологии.
вообщем этот большой массив состоит из других массивов.
Пример массива из которых состоит большой.
day=>121,book=>18,lessons=>25,school=>начальная,name=>Иванов
Остальные масивы тоже содержат day,book,lessons,school,name только значения другие. Вот мне нужно например отсортировать по возрастанию по значению lessons. Как это сделать? Или по другим значениям.
Евгений Галашин:
в ее терминологии
PHP — это он (препроцессор).

Наскольок я понял, Вам в http://ru2.php.net/usort
Markus:
Евгений Галашин:
ВАУ !!!
Даже не знаете как вы мне помогли!!!
Очень признателен!Я все сделал так как хотел!
Markus:
Два часа искал по форуму, но не смог найти ничего подходящего.
есть такой массив:
Array (
[3] => 12
[16] => 3
[8] => 10
[7] => 24
[17] => 3
[9] => 7
[12] => 15
[18] => 4
[13] => 2
[23] => 23
[10] => 13
[11] => 17
[1] => 18
[20] => 9
)

Как отсортировать его по значению ключей в убывающем порядке, с сохранением самих ключей?
И в мануале ничего подходящего не нашел. Может не так искал?
Заранее признателен.
bæv:
Может не так искал?
наверное, да.
Ищите krsort
Markus:
baev:
krsort -- Sort an array by key in reverse order
ksort -- Sort an array by key
В том то и дело что отсортировать массив нужно не по ключам, а по их значению. И в то же время не потерять ключи.
krsort и ksort этого не делают.
Проблему решил так;
<?php
$arr = array("3"=>"12","16"=>"3","8"=>"10","7"=>"24","17"=>"3","9"=>"7","12"=>"15",
"18"=>"4","13"=>"2","23"=>"23","10"=>"13","11"=>"17","1"=>"18","20"=>"9");
natsort($arr);
$new_arr = array_reverse($arr, true);
print_r($new_arr);
?>
В итоге получаем
Array (
[7] => 24
[23] => 23
[1] => 18
[11] => 17
[12] => 15
[10] => 13
[3] => 12
[8] => 10
[20] => 9
[9] => 7
[18] => 4
[16] => 3
[17] => 3
[13] => 2
)
Если не применять array_reverse($arr, true); , то массив будет отсортирован в возрастающем порядке.
Во всяком случае я нашел то что мне нужно.
Если кто знает как это сделать по другому, буду признателен за пример.
Юрий Насретдинов:
Markus:
тогда см. asort или arsort с флагом SORT_NUMERIC
Anonymous:
yUAC:
Но это тоже не помогло
Дмитрий Котеров:
Как отсортировать его по значению ключей в убывающем порядке, с сохранением самих ключей?
В том то и дело что отсортировать массив нужно не по ключам, а по их значению.
Я, кажется, понял, что Вы имеете в виду. В паре "1=>2", по-Вашему, "значение ключа" - это 2, а не 1. Не говорите так больше никогда. Значение и ключ есть у элемента массива, или у пары. Так что говорить "значение ключа" - это то же самое, что говорить просто "ключ".

Почему arsort не помог? Читали документацию?
Anonymous:
yUAC:
Дмитрий Котеров:
Действительно asort или arsort делают как раз то что мне надо. Не могу понять почему у меня раньше не получалось.
Скорее всего из-за невнимательности моей.
Спасибо Вам!
Дмитрий Котеров:
В паре "1=>2", по-Вашему, "значение ключа" - это 2, а не 1. Не говорите так больше никогда. Значение и ключ есть у элемента массива, или у пары. Так что говорить "значение ключа" - это то же самое, что говорить просто "ключ".
Из книги Дмитрия Котерова
Функция asort() сортирует массив, указанный в ее параметре, так, чтобы его зна-чения шли в алфавитном (если это строки) или в возрастающем (для чисел) порядке. При этом сохраняются связи между ключами и соответствующими им значениями, т. е. некоторые пары ключ=>значение просто "всплывают" наверх, а некоторые — наоборот, "опускаются".
Говоря "значение ключа" я имел в виду "значение соответсвующее ключу". Исправлюсь! Спасибо за правильное замечание.
Значит в паре ключ=>значение, левая часть это один из ключей массива, а правая одно из значений массива соответсвующее данному ключу ?
Markus:
Опять забыл залогиниться! Извините великодушно!
Дмитрий Котеров:
Между фразами "значение ключа" и "значение, соответствующее ключу" — большая разница, между прочим. Соответствие подразумевает отображение.

Эта тема на forum.dklab.ru