【发布时间】:2019-11-30 16:36:52
【问题描述】:
我们的平台上有一个在线小游戏,名字相似的用户,例如:Username、UserName 和username 面对面。所有这一切都完美无缺,但现在我们正在添加一个排行榜,将您的数据从 PHP 数组中取出。
$positions = ConfrontationGame::getResults()->toArray();
那么$positions变量就是一个数组,结构如下:
$positions => array {
[
'username' => 'Exampleusername',
'score' => '74'
],
[
'username' => 'ExampleUsername',
'score' => '14'
],
[
'username' => 'exampleusername', // WINNER
'score' => '96'
]
}
我们使用这个数组来创建一个位置表,其中用户名相似(EmapleUsername、Exampleusername 和 exampleusername)的用户彼此面对时应该只留下得分最高的那个,在这种情况下是获胜者exampleusername
这就是我们所拥有的:
$results_table = array_filter($positions, function($val, $key) {
if($key === 'username' && in_array(strtolower($val), $positions)) {
if($key === 'score') {
// ...
// What is done here?
}
}
}, ARRAY_FILTER_USE_BOTH);
【问题讨论】:
-
使用
array_filter(),闭包返回 true 或 false 以包含或不包含在集合中。array_reduce()接受一个可选值,例如一个包含新信息的数组,最终返回。例如,如果您只想解释为用户名列表,请创建一个归约函数并将您的累加器仅包含您想要保留的用户名。
标签: php arrays array-filter