比较两个数组并在PHP中合并

时间:2012-04-09 09:15:39

标签: php arrays

我有两个数组:

$array1 = array(1=>1,10=>1,12=>0,13=>13);
$array2 = array(1=>"Hello",10=>"Test",12=>"check",13=>"error");

这里$ array1有键和值。现在我想从$ array1中得到第一个值(为1),我想检查这个数组是否重复。

这里1重复两次,所以我想取两个键1,10并从$ array2显示这些键的相应值。如果$ array1中的值没有重复,那么我想只显示$ array2中该键的值。

我想得到如下输出:

Hello Test
check
error

这意味着在$ array1中,1,10个键具有相同的值,因此值$ 1和$ array2中的值10合并然后显示。

就像12有0这个没有重复,所以只需从$ array2中获取12的值。

喜欢13。

我该怎么做?

5 个答案:

答案 0 :(得分:5)

<?php

$array1 = array(1=>1,10=>1,12=>0,13=>13);
$array2 = array(1=>"Hello",10=>"Test",12=>"check",13=>"error");
$groupedKeys = array();
foreach($array1 as $key=>$arr){
   $groupedKeys[$arr][] = $key;
}
foreach($groupedKeys as $key => $groupedKeyArr){
    foreach($groupedKeyArr as $groupedKey){
        echo $array2[$groupedKey];
    }
    echo "<br /> ";
}

?>

http://codepad.org/9R9s5lTM

答案 1 :(得分:2)

有一个内置函数返回一个数组,其中包含重复值的次数http://php.net/manual/en/function.array-count-values.php

答案 2 :(得分:1)

这真的很粗糙,但一个简单的方法可能是:

<?

$array1 = array(1=>1,10=>1,12=>0,13=>13);
$array2 = array(1=>"Hello",10=>"Test",12=>"check",13=>"error");

$prev = $array1[1];

foreach($array1 as $key => $val)
{
    if($val != $prev && $key != 1)
    {
        echo '<br />';
    }

    echo $array2[$key].' ';

    $prev = $val;
}

?>

示例:http://codepad.org/OpLdtStp

顺便说一下,假设你的第一把钥匙总是1

答案 3 :(得分:0)

我为您提供的函数返回一个数组,其中包含值在数组中重复的次数(作为值)和值作为键。进一步的任务并不困难。

function check_number_of_times_elements_occur_in_array($a)//returns values of array as keys, associating values being their total occurences in the array
{
$r=array();
foreach($a as $v)
    ++$r[$v];
return $r;
}

答案 4 :(得分:0)

我认为这会为你做..

function test($array1,$array2) {
$repeated_values = array_count_values($array1);
foreach($repeated_values as $key => $value){
    if($value > 1) {
        foreach($array1 as $key1 => $value1){
            if($key == $value1){
                $repeated_values_keys[] = $key1;
            }
        }
    }
}
$str_top = "";
foreach($repeated_values_keys as $k){
    $str_top .= $array2[$k]." ";
}
echo $str_top.'<br/>';
foreach($array2 as $key2 => $value){
    if(!in_array($key2,$repeated_values_keys)){
        echo $value.'<br/>';
    }
}

}