[英]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_1
和Data 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",
]
]
];
我一直在探索RecursiveIteratorIterator和ArrayIterator但不確定如何在到達鍵映射所在的$compare
數組中的子節點后,如何使用父信息訪問 $data 數組的相同部分以進行比較$db
數組。
$compare
數組可以更改,因為它是我想出的一種方法來識別嵌套數組到非嵌套的映射。
不確定這是否會有所幫助。 我寫了一個幾年前的應用程序,所以我可以很容易地看到一個復雜的 JSON 文件的結構。
我有一個 JSON 文件,來自最近抓取的 Zillow 房地產清單。
此鏈接從 url 獲取 JSON 文件。
在此示例中,它從與應用程序相同的位置獲取 zillow.jsn。
JSON 分析儀示例
如果您願意,可以使用它來獲取要比較的 PHP 變量。
只需在 f= 之后更改 JSON 文件的 url
結果的底部是變量和數據類型的摘要。
如果您可能想從此應用程序中獲得任何代碼,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.