Php 组合两个数组,并将数组名称保留为新组合数组中的键

Php 组合两个数组,并将数组名称保留为新组合数组中的键,php,arrays,Php,Arrays,我有两个数组,$array1和$array2。在组合这两个数组时,预期的输出是基于它们的键组合这两个数组,并将数组名称保留为键。我使用的是array\u merge\u recursive($array1,$array2)组合了两个数组,但将数组名称保留为键不适用于此 $array1 = array( 'mobile' => array( array('item' => 'apple','price' => 4), array('item' => 'nok

我有两个数组,
$array1
$array2
。在组合这两个数组时,预期的输出是基于它们的键组合这两个数组,并将数组名称保留为键。我使用的是
array\u merge\u recursive($array1,$array2)
组合了两个数组,但将数组名称保留为键不适用于此

$array1 = array(
'mobile' => array(
    array('item' => 'apple','price' => 4),
    array('item' => 'nokia','price' => 39),
    array('item' => 'samsung','price' => 8)
  ),
  'tv' => array(
     array('item' => 'LG','price' => 39),
     array( 'item' => 'max', 'price' => 8 ),
     array('item' => 'diaken','price' => 3 )
  )
) ;

$array2 = array(
'mobile' => array(
     array('item' => 'HTC','price' => 4 ),
    array('item' => 'OnePlus' ,'price' => 39),
     array ('item' => 'Nexus','price' => 8 )
  ),
'tv' => array( 
    array('item' => 'LG','price' => 39),
    array('item' => 'Panasonic','price' => 8 ),
    array('item' => 'Toshiba' ,'price' => 3 )
  )
);
输出应为:

array(
'mobile' => array(
  'array1' => array(
    '0' => array('item' => 'apple','price' => 4),
    '1' => array('item' => 'nokia','price' => 39),
    '2' => array('item' => 'samsung','price' => 8),
  )
  'array2' => array (
    '0' => array('item' => 'HTC','price' => 4),
    '1' => array('item' => 'OnePlus','price' => 39),
    '2' => array('item' => 'Nexus','price' => 8)
    )  
),
'tv' => array( 
  'array1' => array( 
    '0' => array('item' => 'LG','price' => 39),
    '1' => array('item' => 'max','price' => 8),
    '2' => array('item' => 'diaken','price' => 3)
    ),
    'array2' => array(
    '0' => array('item' => 'LG','price' => 39),
    '1' => array('item' => 'max','price' => 8),
    '2' => array('item' => 'diaken','price' => 3)
    )  
  )
) 
我使用了
array\u merge\u recursive($array1,$array2),我得到的不是上述内容,而是以下内容:

    Array
(
   'mobile' => Array
        (
            Array('item' => 'apple','price' => 4),
            Array('item' => 'nokia','price' => 39),
            Array('item' => 'samsung','price' => 8),
            Array('item' => 'HTC','price' => 4 ),
            Array('item' => 'OnePlus' ,'price' => 39),
            Array ('item' => 'Nexus','price' => 8 ),

        )

    'tv' => Array
        (
            Array('item' => 'LG','price' => 39),
            Array( 'item' => 'max', 'price' => 8 ),
            Array('item' => 'diaken','price' => 3 ),
            Array ('item' => 'LG','price' => 39),
            Array('item' => 'Panasonic','price' => 8 ),
            Array('item' => 'Toshiba' ,'price' => 3 )

        )

) 

虽然我不知道您将如何自动“发现”您的阵列产品,但它应该简单如下:

$array = array();
$array['mobile'] = array();
$array['mobile'][] = $array1['mobile'];
$array['mobile'][] = $array2['mobile'];
$array['tv'] = array();
$array['tv'][] = $array1['tv'];
$array['tv'][] = $array2['tv'];

第一阵列

    $array1 = array
(
    'mobile' => array
        (
            '0' => array
                (
                    'item' => 'apple',
                    'price' => 4
                ),
            '1' => array
                (
                    'item' => 'nokia',
                    'price' => 39
                ),
            '2' => array
                (
                    'item' => 'samsung',
                    'price' => 8
                ),
        ),

    'tv' => array
        (
            '0' => array
                (
                    'item' => 'LG',
                    'price' => 39
                ),
            '1' => array
                (
                    'item' => 'max',
                    'price' => 8
                ),
            '2' => array
                (
                    'item' => 'diaken',
                    'price' => 3
                ),
        )
) ;
第二阵列

    $array2 = array
(
    'mobile' => array
        (
            '0' => array
                (
                    'item' => 'HTC',
                    'price' => 4
                ),
            '1' => array
                (
                    'item' => 'OnePlus',
                    'price' => 39
                ),
            '2' => array
                (
                    'item' => 'Nexus',
                    'price' => 8
                ),
        ),
    'tv' => array
        (
            '0' => array
                (
                    'item' => 'LG',
                    'price' => 39
                ),
            '1' => array
                (
                    'item' => 'Panasonic',
                    'price' => 8
                ),
            '2' => array
                (
                    'item' => 'Toshiba',
                    'price' => 3
                ),
        )
);
marge两个数组并打印结果

    $array['mobile']['array1'] = $array1['mobile'];
    $array['mobile']['array2'] = $array2['mobile'];
    $array['tv']['array1'] = $array1['tv'];
    $array['tv']['array2'] = $array2['tv'];
    echo '<pre>';
    print_r($array);
    echo '</pre>';

)

如果array1和array2按照您的上述评论进行了修复,请检查下面的代码

$array1 = array(
'mobile' => array(
    array('item' => 'apple','price' => 4),
    array('item' => 'nokia','price' => 39),
    array('item' => 'samsung','price' => 8)
  ),
  'tv' => array(
     array('item' => 'LG','price' => 39),
     array( 'item' => 'max', 'price' => 8 ),
     array('item' => 'diaken','price' => 3 )
  )
) ;
$array2 = array (
  'mobile' => array (
    0 => array ('item' =>'HTC','price' => 4,),
    1 => array ('item' =>'OnePlus','price' => 39,),
    2 => array ('item' =>'Nexus','price' => 8,)
  ),
  'tv' => array (
    0 => array ('item' =>'LG','price' => 39,),
    1 => array ('item' =>'Panasonic','price' => 8,),
    2 => array ('item' =>'Toshiba','price' => 3)
  )
); 
o/p:


我想做的只是做下面的事情--

//循环通过第一个数组
$tempArray=[];
foreach($array1作为$key=>$object)
{
$tempArray[$key]=[];
数组推送($tempArray[$key],$object);
数组推送($tempArray[$key],$array2[$key]);
}
回声';
打印(临时数组);
回声';
这将为您提供所需的精确输出。无论数组中存在多少个键。您需要确定应该对哪个数组循环施加影响


您必须为此编写自己的循环逻辑。您是否总是有“移动”和“电视”键,还是会有更多/更少的键?@Scuzzy键是动态的,因此可以更多/更少地显示
$array1
$array2
?只有两个?@Scuzzy只有两个$array1和$array2final\u数组中有重复键。例如,它给出了两个数组键,分别为array1和array2,但在array2键中,也有array1和array2,这是不需要的o/pit没有向我显示任何重复键此o/p。它显示了与您预期的o/p相同的情况。我使用了您的阵列示例进行演示,它的工作原理与您的预期相同。请随时查询。。。。让我知道这对你是否有效。
    Array
    (
[mobile] => Array
    (
        [array1] => Array
            (
                [0] => Array
                    (
                        [item] => apple
                        [price] => 4
                    )

                [1] => Array
                    (
                        [item] => nokia
                        [price] => 39
                    )

                [2] => Array
                    (
                        [item] => samsung
                        [price] => 8
                    )

            )

        [array2] => Array
            (
                [0] => Array
                    (
                        [item] => HTC
                        [price] => 4
                    )

                [1] => Array
                    (
                        [item] => OnePlus
                        [price] => 39
                    )

                [2] => Array
                    (
                        [item] => Nexus
                        [price] => 8
                    )

            )

    )

[tv] => Array
    (
        [array1] => Array
            (
                [0] => Array
                    (
                        [item] => LG
                        [price] => 39
                    )

                [1] => Array
                    (
                        [item] => max
                        [price] => 8
                    )

                [2] => Array
                    (
                        [item] => diaken
                        [price] => 3
                    )

            )

        [array2] => Array
            (
                [0] => Array
                    (
                        [item] => LG
                        [price] => 39
                    )

                [1] => Array
                    (
                        [item] => Panasonic
                        [price] => 8
                    )

                [2] => Array
                    (
                        [item] => Toshiba
                        [price] => 3
                    )

            )

    )
$array_keys = array_keys( array_merge( $array1, $array2));

$final_array = array();
foreach($array_keys as $akey)
{
    if(array_key_exists($akey, $array1))
        $final_array[$akey]['array1'] = $array1[$akey];

    if(array_key_exists($akey, $array2))
        $final_array[$akey]['array2'] = $array2[$akey];
}
echo "<pre>";
    print_r($final_array);
echo "</pre>";
$array1 = array(
'mobile' => array(
    array('item' => 'apple','price' => 4),
    array('item' => 'nokia','price' => 39),
    array('item' => 'samsung','price' => 8)
  ),
  'tv' => array(
     array('item' => 'LG','price' => 39),
     array( 'item' => 'max', 'price' => 8 ),
     array('item' => 'diaken','price' => 3 )
  )
) ;
$array2 = array (
  'mobile' => array (
    0 => array ('item' =>'HTC','price' => 4,),
    1 => array ('item' =>'OnePlus','price' => 39,),
    2 => array ('item' =>'Nexus','price' => 8,)
  ),
  'tv' => array (
    0 => array ('item' =>'LG','price' => 39,),
    1 => array ('item' =>'Panasonic','price' => 8,),
    2 => array ('item' =>'Toshiba','price' => 3)
  )
); 
Array
(
    [mobile] => Array
        (
            [array1] => Array
                (
                    [0] => Array
                        (
                            [item] => apple
                            [price] => 4
                        )

                    [1] => Array
                        (
                            [item] => nokia
                            [price] => 39
                        )

                    [2] => Array
                        (
                            [item] => samsung
                            [price] => 8
                        )

                )

            [array2] => Array
                (
                    [0] => Array
                        (
                            [item] => HTC
                            [price] => 4
                        )

                    [1] => Array
                        (
                            [item] => OnePlus
                            [price] => 39
                        )

                    [2] => Array
                        (
                            [item] => Nexus
                            [price] => 8
                        )

                )

        )

    [tv] => Array
        (
            [array1] => Array
                (
                    [0] => Array
                        (
                            [item] => LG
                            [price] => 39
                        )

                    [1] => Array
                        (
                            [item] => max
                            [price] => 8
                        )

                    [2] => Array
                        (
                            [item] => diaken
                            [price] => 3
                        )

                )

            [array2] => Array
                (
                    [0] => Array
                        (
                            [item] => LG
                            [price] => 39
                        )

                    [1] => Array
                        (
                            [item] => Panasonic
                            [price] => 8
                        )

                    [2] => Array
                        (
                            [item] => Toshiba
                            [price] => 3
                        )

                )

        )

)
// loop through first array 
$tempArray = [];
foreach($array1 as $key=>$object)
{
    $tempArray[$key] = [];
     array_push($tempArray[$key], $object);
     array_push($tempArray[$key],$array2[$key]);
}
echo '<pre>';
print_r($tempArray);
echo '</pre>';