求php数组合集测试

Table of Contents

求php数组合集测试

起因

即兴场景测试题

要求

$a = array('a', 'b', 'c', 'a', 'a', 'e');
$b = array('a', 'b', 'b', 'd', 'e', 'f', 'g');

如上面两个数组,求这两个数组的合集,但不能去重。
注意:不能去重

备注

大概思路:把数组$a,$b转成对应的key => val二维数组,如:$tmp = array('a' => 3, 'b' => 2 ....) .......然后求合集
另外一种方法(也许比较笨):
<?php
$a = array('a', 'b', 'c', 'a', 'a', 'e');
$b = array('a', 'b', 'b', 'd', 'e', 'f', 'g');

$n1 = array();
foreach ($a as $k => $v) {
    if(!array_key_exists($v, $n1)){
        $n1[$v] = 1;
    }else{
        $n1[$v]++;
    }
}

$n2 = array();
foreach ($b as $k => $v) {
    if(!array_key_exists($v, $n2)){
        $n2[$v] = 1;
    }else{
        $n2[$v]++;
    }
}

foreach ($n1 as $k1 => $v1) {
    foreach ($n2 as $k2 => $v2) {
        if($k1 == $k2) {
            $r[] = $k1;
        }
    }
}

$result = array();
foreach ($r as $k => $v) {
    $count = $n1[$v] + $n2[$v];
    $i = 0;
    while ($i < $count) {
        $result[] = $v;
        $i++;
    }
}

print_r($result);

其实以上只能说大致思路,具体场景还没完善,比如:数组的大小,是相同长度;还是一长一短等之类的场景。
不同场景应该有不同的方法,最优有待考证。

Author: josephzeng

Last Updated 2016-03-26. Created by Emacs 24.5.1 (Org mode 8.2.10)

Validate