将对合并到组[PHP/数组]
我在PHP数组中有成对的项。例如:将对合并到组[PHP/数组],php,arrays,grouping,Php,Arrays,Grouping,我在PHP数组中有成对的项。例如: <?php $elements = array( 'tiger'=>'lion', 'car'=>'bike', 'lion'=>'zoo', 'truck'=>'plane' ); ?> 现在,我想合并这些项目,以便所有以任何方式连接的项目都进入一个组。继续上面的例子: <?php $groups = array( 0=>array('tiger', 'lion',
<?php
$elements = array(
'tiger'=>'lion',
'car'=>'bike',
'lion'=>'zoo',
'truck'=>'plane'
);
?>
现在,我想合并这些项目,以便所有以任何方式连接的项目都进入一个组。继续上面的例子:
<?php
$groups = array(
0=>array('tiger', 'lion', 'zoo'),
1=>array('car', 'bike'),
2=>array('truck', 'plane'
);
?>
想法很简单:
创建一个新数组以容纳您的组
在项数组上循环
检查组数组中是否存在项的组-如果不存在,请创建它
分组
想法很简单:
创建一个新数组以容纳您的组
在项数组上循环
检查组数组中是否存在项的组-如果不存在,请创建它
分组
下面是一个O(n)解决方案:
$elements = array(
'tiger' => 'lion',
'car' => 'bike',
'lion' => 'zoo',
'truck' => 'plane'
);
$groups = array();
$sub = array();
$ignore = array();
foreach ( $elements as $key=>$value ) {
if ( isset($ignore[$key]) ) {
continue;
}
$sub = array($key, $value);
if ( isset($elements[$value]) ) {
$ignore[$value] = 1;
$sub[] = $elements[$value];
}
$groups[] = $sub;
}
print_r($groups);
结果:
Array
(
[0] => Array
(
[0] => tiger
[1] => lion
[2] => zoo
)
[1] => Array
(
[0] => car
[1] => bike
)
[2] => Array
(
[0] => truck
[1] => plane
)
)
下面是一个O(n)解决方案:
$elements = array(
'tiger' => 'lion',
'car' => 'bike',
'lion' => 'zoo',
'truck' => 'plane'
);
$groups = array();
$sub = array();
$ignore = array();
foreach ( $elements as $key=>$value ) {
if ( isset($ignore[$key]) ) {
continue;
}
$sub = array($key, $value);
if ( isset($elements[$value]) ) {
$ignore[$value] = 1;
$sub[] = $elements[$value];
}
$groups[] = $sub;
}
print_r($groups);
结果:
Array
(
[0] => Array
(
[0] => tiger
[1] => lion
[2] => zoo
)
[1] => Array
(
[0] => car
[1] => bike
)
[2] => Array
(
[0] => truck
[1] => plane
)
)
您的子阵列的顺序都是相反的,但我不确定这是否重要。非常感谢,顺序不重要。:)您的子阵列的顺序都是相反的,但我不确定这是否重要。非常感谢,顺序不重要。:)非常感谢,订单无关紧要。:)非常感谢,订单无关紧要。:)