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如果他告诉你他需要什么,然后复制粘贴,那就容易多了。毕竟,你这样做是免费的,因为你没有什么比编写代码更好的事情,这样其他人就可以从中获益,为什么不在你做的时候放纵一下他们的愿望呢?:)@嗯,如果他告诉你他需要什么,然后只是复制粘贴,那就容易多了。毕竟,你这样做是免费的,因为你没有什么比编写代码更好的事情,这样其他人就可以从中获益,为什么不在你做的时候放纵一下他们的愿望呢?:)