如何合并这两个数组?

时间:2011-01-30 11:01:41

标签: php

如何合并这两个数组...

$arr1 = array(
    [0] => 'boofoo',
    [1] => '2'
);

$arr2 = array(
    [0] => 'fbfb',
    [1] => '6'
);

得到第三个数组如下?:

$arr3 = array(
    [0] => 'boofoo',
    [1] => '6'
);

也就是说,保留较长的字符串和较高的数值。

3 个答案:

答案 0 :(得分:4)

如果两个数组都具有相同的键,则可以执行简单的foreach并根据他们与>strlen的关系选择更好的值:

$arr3 = array();
foreach ($arr1 as $key => $val) {
    if (array_key_exists($key, $arr2)) {
        if (is_numeric($val)) {
            $arr3[$key] = max($val, $arr2[$key]);
        } else {
            $arr3[$key] = strlen($val) > strlen($arr2[$key]) ? $val : $arr2[$key];
        }
    }
}

在您提出问题之前:expr1 ? expr2 : expr3 is the conditional operator根据expr2的返回值评估表达式expr3expr1。因此,如果strlen($val) > strlen($arr2[$key])为真,则条件运算会评估$val$arr2[$key]

答案 1 :(得分:1)

我认为你可以通过http://www.php.net/manual/en/function.array-walk.php来实现。

我尽快为它写一些测试并更新帖子。

P.S:array_map更好(也许走路甚至没有好处?)

<?php

function combine($arr1, $arr2) {
    return array_map("callback", $arr1, $arr2);
}

function callback($item, &$item2) {
    if (is_numeric($item)) {
        return max($item, $item2);
    }
    if (strlen($item2) > strlen($item)) {
        return $item2;
    }
    return $item;
}

class Tests  extends PHPUnit_Framework_TestCase {
    public function testMergingArrays() {
        $arr1 = array(
            'boofoo',
            '2'
        );

        $arr2 = array(
            'fbfb',
            '6'
        );

        $arr3 = array(
            'boofoo',
            '6'
        );

        $this->assertEquals($arr3, combine($arr1, $arr2));
    }
}

我接受了测试,现在我可以重构它。但是这种实现确实有效。

答案 2 :(得分:0)

您可以使用array_merge()函数,后跟sort()