[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с массивами
Pritex3
Здравствуйте! Такая проблема: Есть массив
$class1 = array($user['qw'],$user['qwe'],$user['qwer'],$user['qwert'],$user['qwerty']);

из него мы определяем максимальное значение
 $max = max($class1); 

по этому максимальному значению ищем переменные из другого массива
$class2 = array($user['qw']=>$user[qw1], $user['qwe']=>$user[qwe1] и т.д.)
находим значение
$class2[$max]
но вот сама проблема: максимальное значение из первого массива иожет совпадать($user['qw'] = $user['qwe'] =$user['qwer']) и в таком случае мне нужно определять максимальное значение из 2-ого массива (переменные с добавлением 1 $user[qw1] ) как это реализовать?



Спустя 39 минут, 34 секунды (7.05.2012 - 16:20) walerus написал(а):
Проверяйте процент совпадений в первом массиве, из этого условия делайте то что нужно.

Спустя 13 минут, 37 секунд (7.05.2012 - 16:34) Pritex3 написал(а):
как совпадения проверять? у меня 40 елементов в массиве

Спустя 1 час, 22 минуты, 15 секунд (7.05.2012 - 17:56) Pritex3 написал(а):
Может отсортировать 2-ой массив функцией asort()?

Спустя 1 день, 3 часа, 2 секунды (8.05.2012 - 20:56) walerus написал(а):
Pritex3 - Вообще не очень понятно что нужно сделать, привел бы простой пример, на 5 - 10ти элементах.

То, что я имел ввиду.
Используя array_count_values(); узнать максимальное количество одинаковых Элементов, потом посчитать процент от всего массива и если допустим процент 70 - 80 процентов, то искать максимальное значение во втором массиве.


Спустя 1 день, 1 час, 30 минут, 5 секунд (9.05.2012 - 22:26) Pritex3 написал(а):
процент никчему, сама проблема что если ключ во втором массиве одинаковый с другим максимальным то выводит последнее значение, как это обойти можно?

Спустя 30 минут, 40 секунд (9.05.2012 - 22:57) Pritex3 написал(а):
упрощу, у меня есть число 29, мне нужно вывести из массива максимальный элемент содержащий ключ 29

Спустя 25 минут, 23 секунды (9.05.2012 - 23:22) sergeiss написал(а):
Цитата (Pritex3 @ 9.05.2012 - 22:26)
сама проблема что если ключ во втором массиве одинаковый с другим максимальным то выводит последнее значение, как это обойти можно?

Ты хочешь сказать, что у тебя в массиве 2 одинаковых ключа? Если это так, то меняй структуру своего скрипта, чтобы не было таких совпадений. Потому что ты получишь только то, что уже получаешь. ПХП не может различить 2 элемента с одинаковыми ключами!!! :) Точнее говоря, их там просто нету. Если ты напишешь $arr[10]=25, а затем $arr[10]=100, то ты просто перезапишешь величину этого элемента массива.

PS. Если принципиально, чтобы сохранить "историю", то тогда вот такой подход может помочь:
$arr[10][]=25;
...

$arr[10][]=100;
...

$arr[10][]=28;

В итоге ты получишь не простую величину в элементе основного массива, а массив величин. В данном примере там, в элементе с индексом 10, будет массив из величин 25, 100, 28 - именно в таком порядке.

Спустя 12 часов, 40 секунд (10.05.2012 - 11:23) Pritex3 написал(а):
может быть можно как-то по другому реализовать? В общем детально : у меня есть значения, среди них я нахожу максимальное, но максимальных может быть несколько, и вот по этому (максимальному) значению мне нужно сделать выборку всех максимальных (если их несколько) значений (отсеить остальные), этим (максимальным) значениям соответствуют другие числа и мне среди (максимальных) значений нужно отсеить так чтобы осталось только максимальное значение с максимальным числом, которое соответствует этому значению.

Спустя 2 часа, 52 минуты, 49 секунд (10.05.2012 - 14:16) sergeiss написал(а):
Pritex3 - лучше покажи пример из чисел (массивов), чтобы было понятнее. Иначе не до конца ясно.

Спустя 3 часа, 44 минуты, 44 секунды (10.05.2012 - 18:00) Pritex3 написал(а):
Вот массив. Все значения переменных числа.
$class = array($user['qqq'],$user['www'],$user['eee'],$user['rrr'],$user['ttt'],$user['yyy']);

также есть значения которые виртуально соответствуют значениям этого массива тоесть переменной $user['qqq'] соответствует переменная $user['qqqFULL'], переменной $user['www'] соот. пер. $user['wwwFULL'] и т.д. ( взаимосвязаны но не равны между собой)
Далее нужно найти максимальное значение из массива $class :
$max = max($class);

НО т.к. в массиве могут быть числа 8, 7, и опять 8 ... и максимальное будет 8, по данному максимальному значению ( тоесть 8) мы должны найти ключ из другого массива там где соответствие :
$class2 = array($user['qqq']=>$user[qqqFULL], $user['www']=>$user[wwwFULL] и т.д.);
//далее т.к. ключей 8 может быть несколько мы должны оставить только тот ключ у которого соответствующее значение больше (например $user[qqqFULL]> остальных)
arsort($class2); //делаем сортировку, но как уже сказали при одинаковых ключах никакие действия невозможны т.к. он уникален
$class2[$max]; //находим этот ключ по значению 8

Как можно сделать всему этому определенную альтернативу??


Спустя 3 часа, 57 минут, 9 секунд (10.05.2012 - 21:57) Pritex3 написал(а):
ну неужели нет альтернативных решений?

Спустя 15 минут, 23 секунды (10.05.2012 - 22:13) sergeiss написал(а):
Если честно, то я так до конца и не понял алгоритм. Может быть, кто-то понял и молчит?
Другой вариант - может быть, тебе поменять алгоритм на такой, чтобы решение было более прозрачным и понятным?

Спустя 37 минут, 50 секунд (10.05.2012 - 22:51) Pritex3 написал(а):
ну тут объяснить очень тяжко, чстно писать задолбался biggrin.gif

Спустя 41 секунда (10.05.2012 - 22:51) Pritex3 написал(а):
алгоритм 100% менять нужно, знать бы в какую сторону рыть

Спустя 35 минут, 46 секунд (10.05.2012 - 23:27) redreem написал(а):
Pritex3

в таких случаях я для себя решаю, что возможно лучше пересмотреть изначальную логику. ибо если логика порождает гемор и частности, то эта логика ущербна.

Спустя 4 минуты, 4 секунды (10.05.2012 - 23:31) inpost написал(а):
Правильно составленный вопрос - 90% успеха. Я прочитал твоё сообщение, так и не понял, что там за алгоритм и что делать надо... увы!

Спустя 7 минут, 53 секунды (10.05.2012 - 23:39) sergeiss написал(а):
Цитата (Pritex3 @ 10.05.2012 - 22:51)
алгоритм 100% менять нужно, знать бы в какую сторону рыть

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

Спустя 9 минут, 24 секунды (10.05.2012 - 23:48) Pritex3 написал(а):
Цитата (sergeiss @ 10.05.2012 - 19:39)
Цитата (Pritex3 @ 10.05.2012 - 22:51)
алгоритм 100% менять нужно, знать бы в какую сторону рыть

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

спасибо буду думать

Спустя 9 часов, 36 минут, 14 секунд (11.05.2012 - 09:25) SlavaFr написал(а):
Цитата (sergeiss @ 10.05.2012 - 18:13)
Может быть, кто-то понял и молчит?

непонял, начинаю говорить
Цитата (Pritex3 @ 10.05.2012 - 14:00)
также есть значения которые виртуально соответствуют значениям этого массива тоесть переменной $user['qqq'] соответствует переменная $user['qqqFULL'], переменной $user['www'] соот. пер. $user['wwwFULL'] и т.д. ( взаимосвязаны но не равны между собой)

в чем тогда заключается взаимосвязь если они не ровны и как мне эту взаимосвязь понять?

У меня есть предположение, но ты должен меня поправить, если я неправельно понял!

Есть 2 Масива М1 и М2.
Ты хочеш найти все ключи масива М2 которые имеют value равное махимальному значению М1?
если да, то это делают так
print_r( array_keys($M2, max($M1) ) );


Цитата (Pritex3 @ 10.05.2012 - 18:51)
алгоритм 100% менять нужно, знать бы в какую сторону рыть
в сторону доступного обьяснения проблемы
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.