正确合并两个不同的数据集

问题描述 投票:0回答:1

我确实需要一些帮助。无论我采取什么方法,我似乎都无法做到这一点。让我进行设置,以便您首先了解任务。

首先我们有一个名为 $play_array 的数据集,其中包含以下信息。

Array(
[506] => Array
    (
        [minus] => Array
            (
                [406] => Array
                    (
                        [all] => Array
                            (
                                [0] => 406
                                [1] => 460
                                [2] => 046
                                [3] => 064
                                [4] => 640
                                [5] => 604
                                [6] => 951
                                [7] => 915
                                [8] => 591
                                [9] => 519
                                [10] => 195
                                [11] => 159
                                [12] => 906
                                [13] => 960
                                [14] => 096
                                [15] => 069
                                [16] => 690
                                [17] => 609
                                [18] => 456
                                [19] => 465
                                [20] => 546
                                [21] => 564
                                [22] => 645
                                [23] => 654
                                [24] => 401
                                [25] => 410
                                [26] => 041
                                [27] => 014
                                [28] => 140
                                [29] => 104
                                [30] => 451
                                [31] => 415
                                [32] => 541
                                [33] => 514
                                [34] => 145
                                [35] => 154
                                [36] => 956
                                [37] => 965
                                [38] => 596
                                [39] => 569
                                [40] => 695
                                [41] => 659
                                [42] => 901
                                [43] => 910
                                [44] => 091
                                [45] => 019
                                [46] => 190
                                [47] => 109
                            )

                    )

                [505] => Array
                    (
                        [all] => Array
                            (
                                [0] => 505
                                [1] => 550
                                [2] => 055
                                [3] => 050
                                [4] => 005
                                [5] => 500
                                [6] => 555
                                [7] => 000
                            )

                    )

            )

    )
);

为了了解我如何设置数组,这是我创建的代码

        foreach($play_array as $k=>$v){
    
          foreach($v['minus'] as $key=>$val){

            $all = file_get_contents("get-nums.php?math=" . $val);
            
            $t_all = explode(", ", $all);
            
            foreach($t_all as $tall){
                unset($play_array[$k]['minus'][$key]);
                $play_array[$k]['minus'][$val]['all'][] = $tall;
            }
    
           }                            
                            
         }

到目前为止一切都很好。这是我遇到麻烦并且似乎无法完全正确的部分。我正在循环遍历 $play_array 以获取我想要显示的减号键。然后我想再次循环遍历 $play_array 并找到其中与减号键匹配的值或其在 [minus][XX][all] 区域内的值。

这是目前的代码。虽然很接近,但不太正确。

    foreach($play_array as $k=>$v){
    
    $min_array = $play_array[$k]['minus'];

    foreach($min_array as $mk => $mv){
        
        $all = $min_array[$mk]['all'];
        
        $check = array_intersect_key(array_flip($all), $play_array);

        if(!empty($check)){
            echo $mk . ": ";
            
            foreach($check as $ck=>$cv){
                if($ck != $mk){
                    echo $ck . ', ';
                }   
            }
        }
        
        if(!empty($check)){
            echo "<br>";
        }   
    }
}

下面是我当前的输出,然后是我想要的输出。

Current:
007: 070,
750: 070,
622: 717, 771, 762,
721: 762, 771, 717,
170: 107, 751,
071: 107, 751,

Desired:
007: 070, 750
622: 717, 771, 762, 712
170: 107, 751, 071

我想我遗漏了一些关于使用 unset() 删除键的信息,这样它们就不会重复,但我不太确定在哪里。非常感谢任何帮助。我花了几个小时尝试多种方法来解决这个问题,这是我一直以来最接近的方法。谢谢!

php arrays loops foreach
1个回答
0
投票

在最后一个循环中,我只需要根据 array_flip 取消设置键

        if(!empty($check)){
        echo $mk . ": ";
        
        foreach($check as $ck=>$cv){
            if($ck != $mk){
                echo $ck . ', ';
                unset($play_array[$ck]);
            }   
          }
        }
© www.soinside.com 2019 - 2024. All rights reserved.