PHP数组合并结果与“和”和“&”

时间:2013-12-04 16:01:56

标签: php arrays

我有一个结果数组,这个数组被排序到另一个数组中,按照大多数提及的顺序列出它们:

$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将它们分开?

3 个答案:

答案 0 :(得分:0)

如果我理解您的代码是正确的,请执行以下操作:

$keywords[] = str_replace(' and ', ' & ', $value);

这会将'和'换成'&amp;'。如果您想要相反,请交换str_replace

中的前2个参数

答案 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,因为您似乎可能正在处理可能有无意的空格的数据。如果这似乎过多,请随意放弃。