Forum Webscript.Ru

Программирование => PHP => Тема начата: Abram от 29 Июля 2003, 15:30:44

Название: array_search
Отправлено: Abram от 29 Июля 2003, 15:30:44
Есть масив : 1 2 3 4 5 2 6 4  Нужно отобрать те елементы которые повторяются.
Пишу :
for ($i=0;$i<=count($mas);$i++)
{

$k=array_search($mas[$i],$mas);
if($k)
{
   echo $k;
}
}
выводит список всех индексов. Как сделать чтобы только те которые повторяются?(в данос случае(5 и 7)
Название: array_search
Отправлено: Меняздесьдавнонет от 29 Июля 2003, 16:15:42
[p]array_count_values[/p]
Название: array_search
Отправлено: MrGreeN от 29 Июля 2003, 16:32:15
Прошу прощения что влез в чужой топик, но уж больно тема схожая
//-----------Массив-----------
Массив передающийся в ф-цию имеет вид [Id док-та][имя док-та]....и т.д.
.......................................
А вот вернуть надо массивчик отсортированный в порядке убывания по количеству встречающихся одинаковых записей...
//-----------Ф-ция------------
function endarr($initarrf)
{
$tmp1[0]=$initarrf[0]["Doc_ID"]; //формируем чего-то типа списка присутсвующих ID документов
$i=0;
foreach($initarrf as $rowarr)
foreach($rowarr as $key=>$val)
if(($key=="Doc_ID")&!in_array($val,$tmp1))
{
$i++;
$tmp1[$i]=$val;
}
foreach($tmp1 as $val) $tmp[$val]=0; //Формируем количество одинаковых по ID документов
foreach($initarrf as $rowarr)
foreach($rowarr as $key=>$val)
if($key=="Doc_ID")
if (array_key_exists($val, $tmp))
{
$tmp[$val]=$tmp[$val]+1;
}
arsort($tmp); // Сортируем их по убыванию
$i=0;
foreach($tmp as $key=>$val)
{
$k=array_search($key,$k); // <-(ВОПРОС)Как бы извлечь ключ по значению?
$countarrf[$key]["Doc_full_name"]=$initarrf[$k]["Doc_full_name"];
$countarrf[$key]["count"]=$val;
$countarrf[$key]["Phys_way"]=$initarrf[$k]["Phys_way"];
$i++;
}
return $countarrf;
}
Название: array_search
Отправлено: Меняздесьдавнонет от 29 Июля 2003, 16:43:36
ничё не понял.
скорее всего, задача из тех, что решаются до того, как придешь к такой проблеме.
откуда у тебя этот самый первый массив берется?
Небось из базы?

Зачем в твоем примере СТОЛЬКО циклов - я не понял.
тут же, при самом "в лоб" решении - только один (явный).
перебрать этот массив, создавая другой, кде ключом является ид документа и есть элемент - количество.
ну, или массив - с индексами самого первого массива.
и 1 usort который по этому полю сортирует
Название: array_search
Отправлено: Меняздесьдавнонет от 29 Июля 2003, 16:54:09
почему у тебя ключами $tmp являются не ид документа, что должно быть естественно, а опять какие-то цыферки?
Название: array_search
Отправлено: MrGreeN от 29 Июля 2003, 17:11:12
Это вариант статистики электронной библиотеки, для того чтобы узнать книга с каким ID более всего пользуется спросом, ну и соответсвенно в самой базе каждому скачиванию соответствует своя запись с уникальным порядковым номером ( там где у меня 0  и 1 и.т.д.).
Ну намёк то я понял (насчёт первоначального определения ключа), но тут такая штука есть, что юзеры могут работать и в локалке и тогда совпадает всё кроме ключа в самой базе (ну там и времени :)), а делать вместо одного запроса к базе два или три (т.к. сначала выводиться общая статистика, а при введении пароля администратора расширенная с указанием IP адресов, времени, логина юзера и т.д. по конкретному ID документа) не есть совсем корректно ( в смысле траффика и времени, IIS и скуль на разных машинах), по-этому и хочу всё в один впихнуть....Ну а куча циклов создаёт кучу вспомогательных массивов (для админа) в которой и будет самая необходимая инфа.....Ну ладно это я обрисовал  чего за цель....
А вообще можно-ли извлечь ключ из двумерного ассоциативного массива (ну и выражение написал:)), по значению и если значений несколько, то вернуть первое которое встретится?
Название: array_search
Отправлено: Меняздесьдавнонет от 29 Июля 2003, 17:14:30
извлесь можно все, но поскольку ты делаешь неправильно, то не вижу никакого смысла тебе что-то отвечать.
Если хочешь и дальше развивать свою заумную писанину вместо того, чтобы сделать просто - то читай ман сам.
там все написано.
Название: array_search
Отправлено: MrGreeN от 29 Июля 2003, 17:15:27
Неее,  в tmp у меня уже ключ и есть ID, а значение- кол-во повторяющихся записей (ну типа склько раз скачали доку),
 а вот в tmp1, там действительно цыферки..
Название: array_search
Отправлено: Меняздесьдавнонет от 29 Июля 2003, 17:16:58
обычно всю станистику можно посчитать в самой базе.
если ее грамотно спроектировать, конечно.

если ты одним запросом это все выдергиваешь - какая проблема сделать этому запросу order by?
Название: array_search
Отправлено: MrGreeN от 29 Июля 2003, 17:17:23
Хотя да, итерации с обоими tmp можно объединить в одну
Название: array_search
Отправлено: MrGreeN от 29 Июля 2003, 17:25:07
Проблема то не в групировке, а в извлечении...
 А в мане есть конечно всё, но как писать статистику - нету...
Ничего тут заумного нет (если пропустить объяснения для чего оно надо), просто надо извлечь...
А нет - так нет, будем велосипед изобретать...:)
Название: array_search
Отправлено: Меняздесьдавнонет от 29 Июля 2003, 17:26:48
родной, ты с кем сейчас разговариваешь?
у тебя форум служит для бесед с самим собой?
заведи себе свой собственный.
Цитировать
тогда совпадает всё кроме ключа в самой базе

и как я должен догадываться - какой из элементов твоих массивов имеется в виду?
я-то пологал, что "ключ в базе" - это "ид документа".
А насамом деле это что?
И какая проблема сделать все за один цикл?

и что это за база такая, в которой по каждому скачиванию пишется вся инфа по документу, а не сосбтвенно число скачиваний?

В конце концов, если уж так уж жалко базу, то апдейть просто базу книг, в поле скачиваний прибавляй единичьку
Название: array_search
Отправлено: Меняздесьдавнонет от 29 Июля 2003, 17:29:09
короче, пусть тебе кто-нибудь другой помогает.
сделать проще ты не хочешь, свой путь считаешь единственно верным, ни структуры базы, ни запросов не привел
а так - в слепую - я не люблю.
ответы на форуме - дело добровольное.
если я не вижу смысла в решаемой задаче, и мне не могут его внятно объяснить (а значит - и себе), то желание заниматься такой проблемой совершенно пропадает.
Название: array_search
Отправлено: MrGreeN от 29 Июля 2003, 17:35:03
Ох, ромик ромик...Ну зачем так кипятится?
 Да я грешным делом подумал что с тобой вроде общаюсь
-  Что за ключ я написал во втором посте.....

-  И чего это получиться? Для каждого док-та заводить отдельную таблицу в которую будут вбиваться и учётная запись пользователя и его IP и время и т.д.?
Название: array_search
Отправлено: Меняздесьдавнонет от 29 Июля 2003, 17:54:06
ну ты загнул!
откуда ты взял такую идею?
я, вроде, о запросах говорил, а не о таблицах

вот тебе пример простого запроса, который по двум таблицам считает и сортирует
честно говоря, я даже не представляю, как ты обходишься без чего-то подобного...
select count(l.id) as c,name from  log l, books b where b.id=l.book_id group by book_id order by c desc;
Название: array_search
Отправлено: MrGreeN от 30 Июля 2003, 09:19:59
Ок..
Название: array_search
Отправлено: Меняздесьдавнонет от 30 Июля 2003, 10:52:24
Чего "ок"? помогло?
Если да, то вот тебе мораль - если бы не моя дурацкая привычка докапываться до причин вопроса, а не отвечатьв лоб, то ты бы так и остался со своими горами неоптимального кода.
А ты мог бы и сам сформулировать нормально. Не "как мне выбраться из болота", а "как мне пройти туда-то".
чтобы не попадать в болото.

а если не работает, то, моджет быть, ты все-таки, скажешь структуру таблиц, о которой я могу только догадываться?

Неужели тебе меня совсем не жалко? Ты даешь 20% информации, а остальное я должен домысливать сам.

В конце концов, кому ответ на вопрос нужен7