【发布时间】:2013-01-02 21:03:18
【问题描述】:
在我的网站上,用户可以用不同的语言发布他们的个人资料,比如 LinkedIn,现在我们在用户的名字之间进行搜索,例如我们搜索:“ar”,我们会查看所有个人资料语言,我们将有一个数组作为回报:
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
现在,我们想显示结果,但事实上,正如您在结果中看到的那样,我们在 English 和 English 和Farsi 语言,但我们不能显示同一个人的 2 个结果!所以我们需要放弃腋窝结果,所以上面的数组应该根据用户 ID 和语言的优先级进行过滤和唯一化,我对语言的优先级是:
- $_SESSION['my_lang'];
- 英语(英文);
- 兰德();
输入“ar”作为他的搜索查询的人有一个$_SESSION['my_lang'],因此在结果数组中的用户的结果为$_SESSION['my_lang'],我们应该保留该结果并放弃其他匹配项同一个人。
在$_SESSION['my_lang']之后,我们的优先级应该是EN lang,如果一个人有N种语言的结果,但是我们在$_SESSION['my_lang']中找不到匹配,那么我们应该将结果保留在en 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 搜索查询真的很复杂,我只是想通了很多连接和过滤...我更喜欢限制结果,知道吗?