Php 合并两个阵列的更有效方法
我将数组的每个元素与数组的每个其他元素进行比较,如果两个元素具有相同的源/目标、目标/源,我将内部数组与员工合并,例如Php 合并两个阵列的更有效方法,php,arrays,Php,Arrays,我将数组的每个元素与数组的每个其他元素进行比较,如果两个元素具有相同的源/目标、目标/源,我将内部数组与员工合并,例如 0=> source - 3 target - 4 officers => 0 - 'Aberdeen Asset Management PLC' 1=> source - 3 target - 4 officers => 0 - 'whatever' 它将被合并为 0=> source - 3 target - 4 officers =>
0=> source - 3 target - 4 officers => 0 - 'Aberdeen Asset Management PLC'
1=> source - 3 target - 4 officers => 0 - 'whatever'
它将被合并为
0=> source - 3 target - 4 officers => 0 - 'Aberdeen Asset Management PLC', 1 - 'whatever'
以下是数据的外观:
我的代码效率很低,有1000多行要执行,执行大约需要90秒,这对于此类事情来说是不可接受的
foreach ($edges as $i => &$edge) {
for ($j = $i + 1; $j < count($edges); $j++) {
if ($edge['source'] == $edges[$j]['source'] && $edge['target'] == $edges[$j]['target']) {
foreach ($edges[$j]['officers'] as $officer) {
array_push($edge['officers'], $officer);
}
array_splice($edges, $j, 1);
}
}
}
foreach($i=>&$edge){
对于($j=$i+1;$j
我认为你应该这样做(更新了):
我认为你应该这样做(更新了):
使用
array\u search
、array\u keys
、array\u slice
和array\u merge
功能的解决方案:
// an exemplary array
$edges = [
0 => ['source' => 3, 'target' => 4, 'officers' => ['Aberdeen Asset Management PLC']],
1 => ['source' => 3, 'target' => 4, 'officers' => ['whatever']],
3 => ['source' => 4, 'target' => 7, 'officers' => ['Jason']],
4 => ['source' => 4, 'target' => 5, 'officers' => ['John']],
5 => ['source' => 4, 'target' => 7, 'officers' => ['Bourne']]
];
foreach ($edges as $k => &$v) {
$next_slice = array_slice($edges, array_search($k, array_keys($edges)) + 1);
foreach ($next_slice as $key => $item) {
if ($item['source'] == $v['source'] && $item['target'] == $v['target']) {
$v['officers'] = array_merge($v['officers'], $item['officers']);
unset($edges[$k + $key + 1]);
}
}
}
print_r($edges);
使用
数组搜索
,数组键
,数组切片
和数组合并
功能的解决方案:
// an exemplary array
$edges = [
0 => ['source' => 3, 'target' => 4, 'officers' => ['Aberdeen Asset Management PLC']],
1 => ['source' => 3, 'target' => 4, 'officers' => ['whatever']],
3 => ['source' => 4, 'target' => 7, 'officers' => ['Jason']],
4 => ['source' => 4, 'target' => 5, 'officers' => ['John']],
5 => ['source' => 4, 'target' => 7, 'officers' => ['Bourne']]
];
foreach ($edges as $k => &$v) {
$next_slice = array_slice($edges, array_search($k, array_keys($edges)) + 1);
foreach ($next_slice as $key => $item) {
if ($item['source'] == $v['source'] && $item['target'] == $v['target']) {
$v['officers'] = array_merge($v['officers'], $item['officers']);
unset($edges[$k + $key + 1]);
}
}
}
print_r($edges);
@u\u mulder如果他告诉你他需要什么,然后复制粘贴,那就容易多了。毕竟,你这样做是免费的,因为你没有什么比编写代码更好的事情,这样其他人就可以从中获益,为什么不在你做的时候放纵一下他们的愿望呢?:)@嗯,如果他告诉你他需要什么,然后只是复制粘贴,那就容易多了。毕竟,你这样做是免费的,因为你没有什么比编写代码更好的事情,这样其他人就可以从中获益,为什么不在你做的时候放纵一下他们的愿望呢?:)