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>';