如何合并具有相同值的键?

时间:2011-12-04 12:39:38

标签: php mysql arrays

代码;

    $all_tags = array();
  while ($row = mysql_fetch_assoc($result)) {
    $all_tags = array_merge($all_tags, explode(' ', $row['title']));
}
$all_tags = array_count_values($all_tags);
echo "<pre>";
arsort($all_tags);

foreach ($all_tags as $key => $val) {
  echo "$key = $val\n";
}

输出;

fuups! = 7
401 = 5
Authorization = 5
Required = 5
, = 3
izle = 3
Error = 2
Server = 2
Internal = 2
500 = 2
Full = 1
MegaSinema.net = 1
Sinema = 1
Bad = 1
Request = 1
Film = 1
400 = 1

我想做的就是将'keys'与相同的整数'value'合并。例子;

401 = 5
Authorization = 5
Required = 5

401 Authorization Required = 5

我不知道我怎么能这样做。我尝试了很多方法,但我从来没有让它工作。谢谢。

3 个答案:

答案 0 :(得分:1)

我在开始时误解了你。 我认为您可以将对象保存在数组中,并在需要时将其内爆。

$out = array();
foreach($array as $key=>$value)
    if(array_key_exists($value, $out))
         $out[$value][] = $key;
    else
         $out[$value] = array($key);

// Then you could do
echo implode(" ", $out[5]); // Should output "401 Authorization Required"

http://codepad.org/MgLKXA75

的工作示例

另一个选择是直接追加并修剪&#34;额外&#34;最后的空间。

$out = array();
foreach($array as $key=>$value)
    if(array_key_exists($value, $out))
         $out[$value] .= $key . ' ';
    else
         $out[$value] = $key . ' ';

// Then you could do
echo trim($out[5]); // Should output "401 Authorization Required"

答案 1 :(得分:1)

试试这个

<?php
    $data = array('fuups!' => '7','401' => '5','Authorization' => '5','Required' => '5',',' => '3','izle' => '3','Error' => '2','Server' => '2','Internal' => '2','500' => '2','Full' => '1','MegaSinema.net' => '1','Sinema' => '1','Bad' => '1','Request' => '1','Film' => '1','400' => '1');
    $rows = array();
    $values = array_values($data);
    asort($values);
    $highestVal = $values[0];
    for ($i = 0; $i <= $highestVal; $i++) {
        foreach ($data as $key => $value) {
            if ($i == $value) {
                $rows[$i] = $rows[$i] . " {$key}";
            }
        }
    }

?>

工作示例XD http://codepad.org/x9uHs1sp

EDIT ----

echo所有密钥,只需将var_dump($rows)替换为:

foreach ($rows as $key) {
    echo "{$key}<br />";
}

答案 2 :(得分:0)

我不熟悉PHP,但我认为你可以尝试创建一个哈希表来处理这个问题。

例如,如果您将3个项目插入哈希表并使用“5”作为键,则可以正确插入第一个项目,其他两个项目应该抛出异常。您可以捕获异常,因为它已被排除,并将值附加到第一个项的值。所以哈希表中的项应该是:

键:5 值:401需要授权

但是你应该确定价值中的订单。

我的2美分,祝你好运!

更新: 如果抛出异常是不可接受的,您可以先在哈希表中查找一个键,如果该键不存在,则插入键和值,如果它已经存在,则将该值附加到现有项值。