PHP - 合并两个类似于array_combine但具有重复键的数组

时间:2012-01-31 11:31:13

标签: php arrays

我有两个数组:

$arrKeys = array('str', 'str', 'otherStr');
$arrVals = array('1.22', '1.99', '5.17');

我想把它们合并成像这样的东西

$arrResult = array(
    array('str' => 1.22),
    array('str' => 1.99),
    array('otherStr' => 5.17)
);

密钥不是唯一的,否则我会使用array_combine。这会产生不同的输出,但它也适合我。

这可以使用PHP 5.2.x以优雅的方式完成,没有foreach / for循环,最好使用PHP的内置函数吗?

3 个答案:

答案 0 :(得分:13)

您可以使用array_map

$arrKeys = array('str', 'str', 'otherStr');
$arrVals = array('1.22', '1.99', '5.17');
function foo($key, $val) {
   return array($key=>$val);
}

$arrResult = array_map('foo', $arrKeys, $arrVals);

print_r($arrResult);
Array
(
    [0] => Array
        (
            [str] => 1.22
        )

    [1] => Array
        (
            [str] => 1.99
        )

    [2] => Array
        (
            [otherStr] => 5.17
        )

)
顺便说一句,如果你升级到PHP 5.3,你可以使用一个更优雅的匿名函数来做到这一点:

array_map(function($key, $val) {return array($key=>$val);}, $arrKeys, $arrVals);

答案 1 :(得分:10)

使用PHP的内置函数绝对没有“优雅”,也没有什么可追求的。

这不是 Haute Couture 节目。这是编程。
只要你有一个理智,可读和有效的解决方案,你就可以称之为优雅。

简单的foreach将完成这项工作。如果开始使用工作解决方案而不是寻找“优雅”的解决方案,那么你会给自己带来巨大的好处并节省大量时间。

$result = array();
foreach ($arrKeys as $i => $key) {
  $result[] = array($key => $arrVals[$i]);
}

答案 2 :(得分:2)

假设您希望将$arrKeys中的项目0和$arrVals中的项目0添加到一个数组中,并将该数组添加为$arrResult中的项目,依此类推,最简单方式可能是一个简单的循环:

$arrResult = array();
for ($i = 0, $max = count($arrKeys); $i < $max; $i++) {
    $arrResult[] = array($arrKeys[$i], $arrValues[$i]);
}