以特定方式合并两个数组

时间:2016-11-24 21:36:03

标签: php arrays pattern-matching

我想要将两个数组组合成几乎相同的值。我总是希望将数组元素插入到组合数组中(如果存在)。 对于:

$b = array("a","a","b","a","a","x")

$a = array("a","a","b","x","a","a")

我想要输出:

$ab = array ("a","a","b","x","a","a","x");

功能array_mergearray_combine不起作用。

2 个答案:

答案 0 :(得分:1)

我可能会尝试使用array_splice()。您必须在不同的阵列上尝试此操作,以查看它是否适用于所有场景:

<?php
$b = array("a","a","b","a","a","x");
$a = array("a","a","b","x","a","a");

function iterateToEven(&$a,&$b)
    {
        $c  =   count($a);
        for($i = 0; $i < $c; $i++) {
            if(isset($a[$i])){
                if(isset($b[$i])) {
                    if($a[$i] == $b[$i])
                        continue;
                    else {
                        if(isset($b[$i+1]) && ($b[$i+1] == $a[$i]))
                            array_splice($a,$i,0,$b[$i]);
                        elseif(isset($a[$i+1]) && ($a[$i+1] == $b[$i]))
                            array_splice($b,$i,0,$a[$i]);
                        else
                            array_splice($a,$i,0,$b[$i]);
                    }
                }
            }
        }

        if(end($a) != end($b)) {
            if(count($a) == count($b))
                iterateToEven($a,$b);
        }

        return (count($a) > count($b))? $a : $b;
    }

$d  =   iterateToEven($a,$b);

print_r($d);

给出输出:

Array
(
    [0] => a
    [1] => a
    [2] => b
    [3] => x
    [4] => a
    [5] => a
    [6] => x
)

有一点需要注意,这种方法会修改$a&amp;在执行此函数的过程中$b数组,如果您希望保持$a$b不变,则可以将函数应用程序包装在另一个函数中并返回$d

答案 1 :(得分:0)

我使用了以下代码

$b = array("a","a","b","a","a","x");
$a = array("a","a","b","x","a","a");
$list = []; //empty array

for ($i=0; $i < count($a) ; $i++) { 
   for ($j=$i; $j <=$i ; $j++) { 

       if ($i== $j) {
           $list[] = $a[$i]; //if values are equal, list[] gets array a value
       }
       else{
        $list[] = $b[$j];
       }
   }
}

return $list;

结果是:["a","a","b","x","a","a"]