На моем сайте пользователи могут публиковать свой профиль на разных языках, что-то вроде LinkedIn, теперь мы ищем между первым именем пользователей, например, мы ищем: 'ar
', и мы изучаем все профили языков, мы будем иметь массив в ответе, как:PHP-массивы - сортировка и приоритет
array
0 => string '20=>en' (length=5)
1 => string '42=>en' (length=5)
2 => string '20=>fa' (length=5)
3 => string '42=>sp' (length=5)
4 => string '12=>fr' (length=5)
5 => string '83=>ar' (length=5)
6 => string '160=>sp' (length=5)
выше массив показывает, что у нас есть 6 профилей, совпадающие наш поиск «ar
» на разных языках, выше массив говорит:
0 => Match found for User with ID = 20 in English Lang(en) profile
1 => Match found for User with ID = 42 in English Lang(en) profile
2 => Match found for User with ID = 20 in Farsi Lang(fa) profile
3 => Match found for User with ID = 42 in Spanish Lang(sp) profile
4 => Match found for User with ID = 12 in French Lang(fr) profile
5 => Match found for User with ID = 83 in Arabic Lang(ar) profile
6 => Match found for User with ID = 160 in Spanish Lang(sp) profile
Теперь мы хотим показать результаты, но, по сути, как вы видите в результатах, у нас есть совпадения для «ar
» для пользователя с ID = 20 в обоих English
и Farsi
языках, но мы не можем показать 2 результата тот же человек! поэтому мы должны отпустить результаты подмышечных, поэтому массив выше должен быть отфильтрован и uniqued на основе идентификаторов пользователей и приоритетом языков, мой приоритет для языков:
- $ _SESSION [ «my_lang»] ;
- английский язык (en);
- Rand();
Человек, который входит в «ar
», как его поисковый запрос имеет $_SESSION['my_lang']
, поэтому в массиве результатов для пользователя, который имеет результаты в $_SESSION['my_lang']
мы должны держать, что результаты и отпустить остальных матчей для одного человека ,
После $_SESSION['my_lang']
, наш приоритет должен быть EN Ланг, если человек имеет результаты на N языках, но мы не могли нашли матч в $_SESSION['my_lang']
, то мы должны сохранить результаты в ан языке и ясно, что остальная часть результатов для этого человека.
после вышеуказанных приоритетов, на самом деле ничто не имеет значение, мы просто должны держать один из результатов для этого человека и избавиться от других результатов для этого человека, поэтому языки должны быть выбраны случайным образом ...
Я понятия не имею, как это можно сделать, Буду признателен за любую помощь.
В моем примере, у меня есть массив, как:
array
0 => string '20=>en' (length=5)
1 => string '42=>en' (length=5)
2 => string '20=>fa' (length=5)
3 => string '42=>sp' (length=5)
4 => string '12=>fr' (length=5)
5 => string '83=>ar' (length=5)
6 => string '160=>sp' (length=5)
, но в вашем примере, у вас есть массив, как:
$users = array(
array('id'=> 20, 'lang'=>'en'),
array('id'=> 42, 'lang'=>'en'),
array('id'=> 20, 'lang'=>'fa'),
array('id'=> 42, 'lang'=>'sp'),
array('id'=> 12, 'lang'=>'fr'),
array('id'=> 83, 'lang'=>'ar'),
array('id'=> 160, 'lang'=>'sp'));
Как я должен сделать мой массив, чтобы посмотреть как ваш массив, так что ваши коды работают ..? Спасибо
Похоже, что вы можете включить это ограничение/порядок в то, что выполняет поисковый запрос, а не на возвращаемый массив данных. –
@MattRazza Поисковый запрос действительно очень сложный, я просто понял, что со многими объединениями и фильтрацией ... Я предпочитаю ограничивать результаты, любую идею? – behz4d