我有一个结果数组,这个数组被排序到另一个数组中,按照大多数提及的顺序列出它们:
$array = get_cforms_entries(); /* all data, no filters */
$keywords = array();
foreach ($array as $key => $sub) {
foreach ($sub['data'] as $key => $value) {
$keywords[] = $value;
}
}
$result = array_count_values(array_map('strtolower', $keywords));
arsort($result);
echo '<ul class="winners">';
$i = 0;
foreach ($result as $value => $number) {
$i++;
echo "<li>$value | $number votes".PHP_EOL. '</li>';
if($i==20) break;
}
echo '</ul>';
输出如下:
hardwell | 389 votes
deadmau5 | 278 votes
armin van buuren | 214 votes
dada life | 211 votes
avicii | 196 votes
tiesto | 193 votes
zedd | 166 votes
alesso | 162 votes
above and beyond | 160 votes
kaskade | 153 votes
krewella | 146 votes
nicky romero | 133 votes
knife party | 118 votes
steve angello | 114 votes
carl cox | 113 votes
steve aoki | 106 votes
above & beyond | 106 votes
daft punk | 105 votes
calvin harris | 100 votes
diplo | 96 votes
问题是:
我有两个结果'超越'和'以上&amp;超过',实际上这些是相同的结果,我如何将它们合并为一个而不是PHP将它们分开?
答案 0 :(得分:0)
如果我理解您的代码是正确的,请执行以下操作:
$keywords[] = str_replace(' and ', ' & ', $value);
这会将'和'换成'&amp;'。如果您想要相反,请交换str_replace
答案 1 :(得分:0)
function clean($n)
{
return str_replace(' and ',' & ',$n);
}
$result = array_count_values(array_map('strtolower', array_map('clean',$array)));
或者,如果您使用的是PHP 5.2+,则可以使用lambda函数进行优雅
$result = array_count_values(array_map('strtolower', array_map(function($n){return str_replace('and','&',$n);},$array)));
答案 2 :(得分:0)
我会使用preg_replace
匹配&
或and
周围空格的任何内容,并将其标准化为and
,然后指定索引/键值$keywords[]
成为该值:
$keywords = array();
foreach ($array as $key => $sub) {
foreach ($sub['data'] as $key => $value) {
$raw_keyword = preg_replace("/\s+[\&|\and]\s+/", " and ", trim($value));
$keywords[$raw_keyword] = $raw_keyword;
}
}
我还添加了trim
来过滤$ value,因为您似乎可能正在处理可能有无意的空格的数据。如果这似乎过多,请随意放弃。