Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
4 / 3 / 6
Регистрация: 13.11.2015
Сообщений: 217

Поиски в массиве

14.03.2018, 18:31. Показов 603. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Я 3 день в php пока что, и не могу до конца разобраться, как правильно сделать два поиска в массиве.
1) в массиве:
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Array
(
    [0] => Array
            (
                [user_id] => 43841776
                [likes_count] => 1
            )
    [1] => Array
            (
                [user_id] => 452138481
                [likes_count] => 1
            )
    [2] => Array
            (
                [user_id] => 452138481
                [likes_count] => 1
            )
    [3] => Array
            (
                [user_id] => 43841776
                [likes_count] => 0
            )
)

среди элементов нужно найти тот user_id, в котором наибольше likes_count. Если есть несколько разных user_id с одинаковым likes_count -- вернуть -1. Тоесть, в массиве выше должен вернуться user_id = 452138481.
Наработка:
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function getBestLiker()
{
    global $allPostsComments;
    $top = 0;
    // поиск max лайка:
    for($i = 0; $i < count($allPostsComments); $i++)
    {
        echo $allPostsComments[$i]['likes_count']. " | " .$allPostsComments[$i]['user_id']. "<br>";// тестовый вывод
        //
        if($allPostsComments[$i]['likes_count'] < 1) continue;
        if($allPostsComments[$i]['likes_count'] > $allPostsComments[$top]['likes_count']) $top = $i;
    }
    print_r("тест1 >>" .$top);
    
    // поиск дублирования числа лайка в том же списке:
    for($i = 0; $i < count($allPostsComments); $i++)
    {
        if($allPostsComments[$i]['likes_count'] < 1) continue;
        if($top >= 0 && $top != $i && $allPostsComments[$top]['likes_count'] == $allPostsComments[$i]['likes_count'])
            { $top = -1; break; }
    }
    print_r("тест2 >>" .$top);
    //print_r($allPostsComments);
    if($top == -1 || empty($allPostsComments) || $allPostsComments[$top]['likes_count'] == 0)
        $args[] = [ 'likes' => '-1', 'user_id' => '-1' ];
      else $args[] = [ 'likes' => $allPostsComments[$top]['likes_count'], 'user_id' => $allPostsComments[$top]['user_id'] ];
    //print_r($args);
    return $args;
}


2) в массиве выше нужно найти тот user_id, который больше нигде в массиве не повторяется. Тоесть, в массиве выше повторяются 2 элемента по 2 раза, а значит ничего не вернёт.
Наработка:
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function getBestCommentator()// 
{
    global $allPostsComments;
    //for($i = 0; $i < count($allPostsComments); $i++) echo $allPostsComments[$i]['user_id']. "<br>";
    //
    if(empty($allPostsComments)) $args[] = [ 'count' => '-1', 'user_id' => '-1' ];
    else
    {
        $commentators = [];
        foreach ($allPostsComments as $comment)// в каждом посте берем кол-во комментов и дату создания поста
        {
            if (array_key_exists($comment['user_id'], $commentators) === true) $commentators[$comment['user_id']] += 1;
            else $commentators[$comment['user_id']] = 1;
        }
        //print_r($commentators);
        arsort($commentators);
        $keys = array_keys($commentators);
        // поиск дублирования числа в том же списке:
        $count_copy = 0;
        foreach ($commentators as $comment => $value)
        {
            if($value == $commentators[$keys[0]])
            {
                //echo $count_copy. "<< ";
                if(++$count_copy >= 2)
                {
                    //echo "!";
                    return $args[] = [ 'count' => '-1', 'user_id' => '-1' ];
                }
            }
        }
        //
        return $args[] = [ 'count' => array_shift($commentators), 'user_id' => $keys[0] ];
    }
}


Буду очень благодарен за помощь)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.03.2018, 18:31
Ответы с готовыми решениями:

Поиски Грааля C++
Сэр Галахад продолжает поиски Грааля. В данный момент он находится в деревне, где он опрашивает жителей в какой стороне Грааль. В качестве...

Забавные поиски
Решил тут поделится веселыми моментами некоторых поисков. Предлагаю присоединятся по форме - Задача поиска - скрин результата. Итак: ...

Поиски возвышенного
В этой задаче вы будете работать с картой высот для прямоугольного кусочка местности. Местность разбита на небольшие квадраты, и для...

1
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
14.03.2018, 23:33
В первом случае даже если делать перебором, можно все сделать за один обход

PHP
1
2
3
4
5
6
7
8
9
10
11
$maxElem = ['likes_count' => -1, 'user_id' => -1];
 
foreach($allPostsComments as $elem)
{   
    if($elem['likes_count'] > $maxElem['likes_count'] && $elem['likes_count']) $maxElem = $elem;
    else if($elem['likes_count'] === $maxElem['likes_count']) $maxElem['user_id'] = -1;   
}
 
if($maxElem['user_id'] < 0) $maxElem['likes_count'] = -1;
 
$args[] = $maxElem;
Добавлено через 25 минут
Как вариант, через функцию сортировки отсортировать двумерный массив по убыванию кол-ва лайков и взять первую строку

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$result = ['likes_count' => -1, 'user_id' => -1];
 
if(count($allPostsComments)){
 
    array_multisort(
        array_column($allPostsComments, 'likes_count'), 
        SORT_DESC, $allPostsComments);
        
    if($allPostsComments[0]['likes_count'] && 
        (
            count($allPostsComments) === 1 || 
            $allPostsComments[0]['likes_count'] > $allPostsComments[1]['likes_count']
        )
    ) 
        
        $result = $allPostsComments[0]; 
}
 
$args[] = $result;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.03.2018, 23:33
Помогаю со студенческими работами здесь

WP не понятные ссылки в поиски
Здравствуйте, до последнего апдейта яндекс, все было хорошо. Но произошло следующие. Зашел в яндекс вебмастер, смотрю у меня увечилось...

Поиски newstar Sonny
Здравия Всем! Вот уже некоторое время занимаюсь поисками &quot;фотомодели&quot; Sonny. Следы ведут в Украину. Выложить фото не могу, ибо боюсь бана....

Реализация очереди, поиски теории
Здравствуйте, получил задание : 1) Реализации очереди с помощью указателей. 2) Реализации очереди с помощью цикличного массива. ...

Работа с Матрицами.Перестановки и ПОиски
Добрый вечер Снова побеспокою вас. Определить минимальные элементы каждого столбца и их координаты.Минимальные элементы каждого...

QuerySelectorAll (заменяет все поиски?)
С помощью querySelectorAll могу получить доступ к любому селлектору. Вопрос: В чем смысл остальных поисков...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru