簡體   English   中英

遞歸遍歷並比較多維數組與一維數組並使用映射值構建差異

[英]Recursively traverse and compare a multi-dimensional array with a one dimensional array and build a diff using the mapped values

鑒於這兩個 arrays (一個來自 json,解碼為 PHP 數組,而另一個來自數據庫,因此它是一維的)我需要以某種方式構建一個新的嵌套數組,僅與一些更改的值進行比較。

$data_array = [
    'level_one' => [
        'level_two' => [
            'level_three' => [
                'array.key.1' => "some_value_1",
                'array.key.2' => "some_value_2",
            ],
            'ordinary_key' => 'value'
        ]
    ],
    'example_1' => [
        'example_2' => [
            "color.1" => "green"
        ],
        'example_3' => [
            "color.2" => "orange",
            "color.3" => "red",
        ]
    ]
];

$db_array = [
    'array_key_1' => "db_value_1",
    'array_key_2' => "some_value_2",
    'color_1' => "pink",
    'color_2' => "orange",
    'color_3' => "yellow"
];

由於我要比較的鍵名不相同,並且它們也嵌套在數據數組中(例如DB = array_key_1Data array = level_one > level_two > level_three > array.key.1 ,我正在為 map 創建第三個數組鍵。它包含通向需要比較的子節點的所有父節點,最后它是一個數組到 map 從 data/json 數組到 db 數組的鍵。

$compare = [
    'level_one' => [
        'level_two' => [
            'level_three' => [
                [ 'json_key' => 'array.key.1', 'database' => 'array_key_1'],
                [ 'json_key' => 'array.key.2', 'database' => 'array_key_2']
            ],
        ]
    ],
    'example_1' => [
        'example_3' => [
            [ 'json_key' => 'color.2', 'database' => 'color_2'],
            [ 'json_key' => 'color.3', 'database' => 'color_3']
        ]
    ]
];

我想遍歷 $compare 數組,找到需要比較的鍵,使用鍵訪問 db & data 數組中的數據,然后使用 db 數組中的值(如果它們不同)構建第三個嵌套數組。

給定三個輸入,最終的 output 看起來像

$diff_array = [
    'level_one' => [
        'level_two' => [
            'level_three' => [
                'array.key.1' => "db_value_1"
            ]
        ]
    ],
    'example_1' => [
        'example_3' => [
            "color.3" => "yellow",
        ]
    ]
];

我一直在探索RecursiveIteratorIteratorArrayIterator但不確定如何在到達鍵映射所在的$compare數組中的子節點后,如何使用父信息訪問 $data 數組的相同部分以進行比較$db數組。

$compare數組可以更改,因為它是我想出的一種方法來識別嵌套數組到非嵌套的映射。

不確定這是否會有所幫助。 我寫了一個幾年前的應用程序,所以我可以很容易地看到一個復雜的 JSON 文件的結構。
我有一個 JSON 文件,來自最近抓取的 Zillow 房地產清單。
此鏈接從 url 獲取 JSON 文件。
在此示例中,它從與應用程序相同的位置獲取 zillow.jsn。

JSON 分析儀示例

如果您願意,可以使用它來獲取要比較的 PHP 變量。
只需在 f= 之后更改 JSON 文件的 url

結果的底部是變量和數據類型的摘要。

如果您可能想從此應用程序中獲得任何代碼,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM