PHP-如何在数组中有条件地合并数组的一些键
我有一个数组的数组。我需要修改它,只有当数组的PHP-如何在数组中有条件地合并数组的一些键,php,arrays,loops,Php,Arrays,Loops,我有一个数组的数组。我需要修改它,只有当数组的company和type与其任何兄弟数组相同时,它们的cars数组才会合并。考虑下面的数组: array( array( 'company' => 'Jeep', 'type' => 'SUV', 'cars' => array( 'Compass', ), ), array( 'compan
company
和type
与其任何兄弟数组相同时,它们的cars
数组才会合并。考虑下面的数组:
array(
array(
'company' => 'Jeep',
'type' => 'SUV',
'cars' => array(
'Compass',
),
),
array(
'company' => 'Jeep',
'type' => 'SUV',
'cars' => array(
'Wrangler',
),
),
array(
'company' => 'Mercedes',
'type' => 'Sedan',
'cars' => array(
'C-Class',
),
),
array(
'company' => 'Mercedes',
'type' => 'SUV',
'cars' => array(
'G Wagon',
),
),
array(
'company' => 'Jeep',
'type' => 'SUV',
'cars' => array(
'Cherokee',
),
),
)
处理上述阵列后的预期输出应为:
array(
array(
'company' => 'Jeep',
'type' => 'SUV',
'cars' => array(
'Compass',
'Wrangler',
'Cherokee',
),
),
array(
'company' => 'Mercedes',
'type' => 'Sedan',
'car' => array(
'C-Class',
),
),
array(
'company' => 'Mercedes',
'type' => 'SUV',
'car' => array(
'G Wagon',
),
),
)
我试过每个循环,但我想不出来。我认为可以用递归来完成,但我不知道从哪里开始
foreach ( $array as $one ) {
foreach ( $array as $two ) {
$zzz = [];
if ( $one['company'] === $two['company'] && $one['type'] === $two['type'] ) {
if ( $one['cars'] === $two['cars'] ) {
$zzz = $one;
} else {
$zzz = [
'company' => $one['company'],
'type' => $one['type'],
'cars' => array_merge( $one['cars'], $two['cars'] ),
];
}
} else {
$zzz = $one;
}
$temp[] = $zzz;
}
}
您需要通过循环遍历数组,并检查是否已设置公司和类型
$arr =array(
array(
'company' => 'Jeep',
'type' => 'SUV',
'cars' => array(
'Compass',
),
),
array(
'company' => 'Jeep',
'type' => 'SUV',
'cars' => array(
'Wrangler',
),
),
array(
'company' => 'Mercedes',
'type' => 'Sedan',
'cars' => array(
'C-Class',
),
),
array(
'company' => 'Mercedes',
'type' => 'SUV',
'cars' => array(
'G Wagon',
),
),
array(
'company' => 'Jeep',
'type' => 'SUV',
'cars' => array(
'Cherokee',
),
),
);
$new_array = array();
foreach ($arr as $value) {
if(isset($new_array[$value['company']."_".$value['type']]))
$new_array[$value['company']."_".$value['type']]['cars'][]=$value['cars'][0];
else
$new_array[$value['company']."_".$value['type']]=$value;
}
$new_array = array_values($new_array);
var_dump($new_array);
这是其中一件简单的事情,看起来很难让你理解:
$input = array( /* ... your original array ... */ );
$output = array();
foreach ($input as $icar)
{
$filed = false;
foreach ($output as $okey => $ocar) // look for existing brand and type to file into
if ($ocar['company'] == $icar['company'] && $ocar['type'] == $icar['type'])
{
$output[$okey]['cars'][] = $icar['cars'][0];
$filed = true;
break; // no need to continue once we put it somewhere
}
if (!$filed) // it's a new brand and type so we copy the entire thing
$output[] = $icar;
}
print_r($output);
带有if条件的简单循环。祝你好运。你的逻辑是什么?@AlivetoDie我已经添加了我的代码。它不起作用。这是我以前没有添加过的。我不是一个被否决的选民,但没有代码工作的问题需要关闭,而不是关闭answer@AlivetoDie很抱歉,我在发布问题时没有添加代码。我后来编辑并添加了它。@Cobra\u Fast谢谢您的帮助:)