Всем привет. Помогите пожалуйста с поиском самого часто встречающегося элемента (числа) в массиве. Поиск в гугле выдает примеры на других языках программирования. Пытался адаптировать под php - безрезультатно. Может кто подскажет рабочий вариант? Из того, что я пробовал: PHP: <?php $curr_value = $object->records[0]->loc; $curr_count = 1; $max_value = $object->records[0]->loc; $max_count = 1; for ($i = 1; $i < $massivecount; $i++) { if ($object->records[$i]->loc == $curr_value) $curr_count = $curr_count + 1; else { if ($curr_count > $max_count) { $max_count = $curr_count; $max_value = $curr_value; } $curr_count = 1; $curr_value = $object->records[$i]->loc; } } или второй вариант: PHP: $num = ($object->records[1]->loc); $max_frq = 1; for ($i = 1; $i < 19; $i++) { $frq = 1; for ($k = $i + 1; $k < massivecount; $k++) { if (($object->records[$i]->loc) == ($object->records[$k]->loc)) $frq = $frq + 1; if ($frq > $max_frq) { $max_frq = $frq; $num = ($object->records[$i]->loc); } } } echo "Число $num встречается $max_frq раз" . "\n"; Спойлер: Оригинал автора $curr_value = $object->records[0]->loc; $curr_count = 1; $max_value = $object->records[0]->loc; $max_count = 1; for ($i=1; $i < $massivecount; $i++) { if ($object->records[$i]->loc == $curr_value) $curr_count = $curr_count+1; else { if ($curr_count > $max_count) { $max_count = $curr_count; $max_value = $curr_value; } $curr_count = 1; $curr_value = $object->records[$i]->loc; } } или второй вариант: $num = ($object->records[1]->loc); $max_frq = 1; for ($i = 1; $i < 19; $i++) { $frq = 1; for ($k = $i+1; $k < massivecount; $k++) { if (($object->records[$i]->loc) == ($object->records[$k]->loc)) $frq = $frq + 1; if ($frq > $max_frq) { $max_frq = $frq; $num = ($object->records[$i]->loc); }} } echo "Число $num встречается $max_frq раз" . "\n";
Зачем использовать классы? Тут же достаточно массива, всего-то с одним индексом. PHP: <?php $array=array();//тут числа for($i=0;$array[$i];$i++) {//не люблю WHILE ибо не умею его готовить. $sel[$array[$i]]++; if($sel['top'] < $sel[$array[$i]]) { $sel['top']=$array[$i]; }; } die('Число "'.$sel['top'].'" встречается '.$sel[$sel['top']].' раз.'); ?>
Главное - когда в 90% случаев нет нужной функции - просто перестаёшь надеяться, что такое существует и даже не ищешь. Ну и иногда бывают периоды, когда поисковики выдают особо некорректные варианты. Второстепенное: 1. Непортируемость решения на иные платформы. Может это у меня опыт плохой, но когда в очередной раз приходится переделывать "красивую" запись в "рабочую" - это начинает задалбывать. А ведь ещё и язык может скончаться и всё что ты знаешь - можно просто забыть. 2. Невозможность расширить функционал без серьёзного изменения кода (например, нужно заодно подчистить дубли - будет уже два прохода по массиву, а это очень плохо) 3. Закрытость функции - я не знаю как она сама написана. За последние 10 лет моё доверие ко всему существенно подорвано, потому при возможности предпочитаю решения с "кишками наружу". Вот как бы этот набор. Хотя, в процессе обучения, есть ещё один вариант: ►Использование готовых решений является прежде всего упрощением жизни. С учётом того, что качественное программирование возможно исключительно при понимании сути языка на котором это создаётся, отсутствие подобного опыта становится критичным. Так что встроенные функции становятся удобны лишь тогда, когда либо не нужно в этом разбираться (срок исследования до приемлемого результата критически большой), либо шанс, что этот опыт не нужен - запределен. Ну или либо если просто лень/дедлайн что-то делать самому.
@wano987 вот ты тряпку расписал а толку ноль. Задача решается встроенной функцией. Встроенная функция работает быстрее самописной. Продолжай тратить время на повторение готового функционала. Про дедлайны он тут еще будет рассказывать, умора...