Mam taki problem, a właściwie pytanie techniczne
Mam trzy pliki JSON
Pierwszy plik JSON jest plikiem referencyjnym - w tym pliku nic się nie zmienia.
Drugi plik JSON zapisywane są w nim zmiany z jednego źródła
Trzeci plik JSON zapisywane są w nim zmiany z drugiego źródła
Raz na 8 godzin muszę zrobić porównanie i zmiany zrobione w plikach (drugim i trzecim) zastosować w pliku referencyjnym.
Za nic nie wiem jak się za to zabrać.
Ktoś coś

Tak wygląda plik referencyjny
{ "AutoAccept": true, "AutoRank": true, "BlackList": true, "accountData": [ { "UserID": 1234, "AccountName": "TEST1", "Rank": 1, }, { "UserID": 4321, "AccountName": "TEST2", "Rank": 1, }, { "UserID": 5678, "AccountName": "TEST3", "Rank": 1, }, { "UserID": 8765, "AccountName": "TEST4", "Rank": 1, } ] }
w plikach 2 i 3 może do obiektu accountData zostać coś dodane albo usunięte
np.
Plik 2
{ "AutoAccept": true, "AutoRank": true, "BlackList": true, "accountData": [ { "UserID": 1234, "AccountName": "TEST1", "Rank": 3, }, { "UserID": 4321, "AccountName": "TEST2", "Rank": 1, }, { "UserID": 8765, "AccountName": "TEST4", "Rank": 1, } ] }
Plik 3
{ "AutoAccept": true, "AutoRank": true, "BlackList": true, "accountData": [ { "UserID": 1234, "AccountName": "TEST1", "Rank": 1, }, { "UserID": 4321, "AccountName": "TEST2", "Rank": 1, }, { "UserID": 5678, "AccountName": "TEST3", "Rank": 1, }, { "UserID": 8765, "AccountName": "TEST4", "Rank": 1, }, { "UserID": 9832, "AccountName": "TEST5", "Rank": 2, } ] }
Czyli plik wynikowy powinien wyglądać
{ "AutoAccept": true, "AutoRank": true, "BlackList": true, "accountData": [ { "UserID": 1234, "AccountName": "TEST1", "Rank": 3, }, { "UserID": 4321, "AccountName": "TEST2", "Rank": 1, }, { "UserID": 8765, "AccountName": "TEST4", "Rank": 1, }, { "UserID": 9832, "AccountName": "TEST5", "Rank": 2, } ] }
Wymyśliłem coś takiego
foreach ($plik2['accountData'] as $user) { foreach ($plik_referencyjny['accountData'] as $new_user) { if ($user['UserID'] == !$new_user['UserID']) { } } } $encoded = json_encode($plik_referencyjny, JSON_PRETTY_PRINT); file_put_contents('plik_referencyjny.json', $encoded);
To porównanie jednego z plików potem robię z drugim
Pewnie nie jeden powie, że zrobione naokoło ale działa

$plik_referencyjny = 'C:\XAMPP\htdocs\Pik_referencyjny.json'; $plik_pierwszy = 'C:\XAMPP\htdocs\Plik_pierwszy.json'; $plik_drugi = 'C:\XAMPP\htdocs\Plik_drugi.json'; function compare_3_files($plik_referencyjny, $plik_pierwszy, $plik_drugi) { $plik_referencyjny_json = json_decode($plik_referencyjny_input,true); $plik_pierwszy_json = json_decode($plik_pierwszy_input,true); $plik_drugi_json = json_decode($plik_drugi_input,true); $tymczasowa_1_Nie_Zmionione['accountData'] = []; $tymczasowa_1_Zmienione['accountData'] = []; $tymczasowa_1_Nowe_Wspolne['accountData'] = []; $tymczasowa_1_Nowe['accountData'] = []; $tymczasowa_2_Nie_Zmionione['accountData'] = []; $tymczasowa_2_Zmienione['accountData'] = []; $tymczasowa_2_Nowe_Wspolne['accountData'] = []; $tymczasowa_2_Nowe['accountData'] = []; $wpolne_nie_zmienione['accountData'] = []; $wspolne_nowe['accountData'] = []; $tabela_koncowa['accountData'] = []; // Tabela tymczasowa pliku pierwszego foreach ($plik_pierwszy_json['accountData'] as $user) { foreach ($plik_referencyjny_json['accountData'] as $old_user) { if ($old_user == $user) { } else if ($old_user['UserID'] == $user['UserID'] && $old_user != $user) { } } } } } // Tabela tymczasowa pliku drugiego foreach ($plik_drugi_json['accountData'] as $user) { foreach ($plik_referencyjny_json['accountData'] as $old_user) { if ($old_user == $user) { } else if ($old_user['UserID'] == $user['UserID'] && $old_user != $user) { } } } } } // Wpisy nie zmienione w obu plikach foreach ($tymczasowa_1_Nie_Zmionione['accountData'] as $tym_1) { foreach ($tymczasowa_2_Nie_Zmionione['accountData'] as $tym_2) { if ($tym_1 == $tym_2) { } } } // Nowe tylko dla pliku pierwszego foreach ($tymczasowa_1_Nowe_Wspolne['accountData'] as $user) { } } // Nowe tylko dla pliku drugiego foreach ($tymczasowa_2_Nowe_Wspolne['accountData'] as $user) { } } // Nowe wpisy (takie same dla obu plików) foreach ($tymczasowa_1_Nowe_Wspolne['accountData'] as $user) { foreach ($tymczasowa_2_Nowe_Wspolne['accountData'] as $old_user) { } } // Wspólne dane foreach ($wpolne_nie_zmienione['accountData'] as $user) { } foreach ($wspolne_nowe['accountData'] as $user) { } // Scalam dane (nowszy plik ma priorytet) if ($ktory_plik_nowszy > 0 ) { foreach ($tymczasowa_1_Zmienione['accountData'] as $user) { } foreach ($tymczasowa_2_Zmienione['accountData'] as $user) { $flaga = 0; foreach ($tabela_koncowa['accountData'] as $newuser) { if($newuser['UserID'] == $user['UserID']) { $flaga = 1; } } $flaga = 0; } } else { foreach ($tymczasowa_2_Zmienione['accountData'] as $user) { } foreach ($tymczasowa_1_Zmienione['accountData'] as $user) { $flaga = 0; foreach ($tabela_koncowa['accountData'] as $newuser) { if($newuser['UserID'] == $user['UserID']) { $flaga = 1; } } $flaga = 0; } } if ($ktory_plik_nowszy > 0 ) { foreach ($tymczasowa_1_Nowe['accountData'] as $user) { } foreach ($tymczasowa_2_Nowe['accountData'] as $user) { $flaga = 0; foreach ($tabela_koncowa['accountData'] as $newuser) { if($newuser['UserID'] == $user['UserID']) { $flaga = 1; } } $flaga = 0; } } else { foreach ($tymczasowa_2_Nowe['accountData'] as $user) { } foreach ($tymczasowa_1_Nowe['accountData'] as $user) { $flaga = 0; foreach ($tabela_koncowa['accountData'] as $newuser) { if($newuser['UserID'] == $user['UserID']) { $flaga = 1; } } $flaga = 0; } } return $tabela_koncowa['accountData']; } $plik_wynikowy = json_decode($plik_wynikowy_input,true); $plik_wynikowy['accountData'] = compare_3_files($plik_referencyjny, $plik_pierwszy, $plik_drugi); $manageGuild_encoded = json_encode($plik_wynikowy, JSON_PRETTY_PRINT); file_put_contents('C:\XAMPP\htdocs\Plik_wynikowy.json', $manageGuild_encoded);