PHP结合多维数组

时间:2015-04-23 04:38:28

标签: php

我正在尝试合并包含多维数组的两个数组,并以下面的格式创建第三个数组"

这是第一个多维数组:

Array
(
    [USA1] => Array
    (
        [0] => NewYork
        [1] => MASS
    )

[USA2] => Array
    (
        [0] => NewYork
    )

[USA3] => Array
    (
        [0] => NewYork
    )

)

这是我的第二个多维数组:

Array
(
    [USA1] => Array
        (
            [NewYork] => Array
                (
                [0] => Array
                    (
                        [0] => Town1
                        [1] => Town2
                    )
            )

        [MASS] => Array
            (
                [0] => Array
                    (
                        [0] => Town3
                        [1] => Town4
                    )
            )
    )

[USA2] => Array
    (
        [NewYork] => Array
            (
                [0] => Array
                    (
                        [0] => Town1
                        [1] => Town2
                    )
            )
    )

现在我想根据公共密钥创建第3个数组。如果键是匹配的,那么我需要以循环方式为这个数组分配一个值:

例如 如果值为" NewYork"在USA1键下,我必须分配" Town1"来自另一个数组的值。因为这个密钥也出现在USA2下,所以我必须分配" Town2" (循环时尚)。如果有更多" NewYork"值存在,如果有更多的值,如" Town9"然后我们必须分配该值,如果不存在那么我必须分配" Town1"价值回来。 如果密钥只出现一次,例如" MASS"那么我们需要删除第二个值,即" Town4"在这种情况下。

    Array
    (
        [USA1] => Array
            (
                [0] => NewYork => Town1
                [1] => Mass => Town3
            )

    [USA2] => Array
        (
            [0] => NewYork => Town2
        )

    [USA3] => Array
        (
            [0] => NewYork =>Town1
        )

)

注意:除第3个之外的所有数组输出都来自print_r命令

非常感谢帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

我不清楚你要求的是什么。它并不是真正的合并,因为在你的最终数组[USA3]应该是空的,因为array2中没有匹配的键。而且你要求为循环分配值,这不是我期望数组合并的行为。

我假设你要做的是在城市中平均分配城镇。 基于这个假设,我只使用了第二个数组中USA1的值,但是这将产生你提供的第三个数组。我已经更新了代码示例以合并第二个数组。

$map = array(); 
foreach ($array2 as $usa => $cities) 
{ 
    $map = $cities + $map; 
}

$towns = array();

foreach($array1 as $usa => $cityArray)
{
    while(!empty($cityArray)) 
    {
        $city = array_shift( $cityArray );
        if(empty($towns[$city]))
            $towns[$city] = $map[$city][0];

        $array3[ $usa ][] = array( $city => array_shift( $towns[$city] ) );
    }
}

这样可行,但是如果你在$ array2 ['US1']和$ array2 ['US2']中有不同的值,那么你应该在将这两个数组发送到上面的代码之前将它们合并。更新代码正确合并第二个数组。