Witam ponownie
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) {
array_push($tymczasowa_1_Nie_Zmionione['accountData'], $user); } else
if ($old_user['UserID'] == $user['UserID'] && $old_user != $user) {
array_push($tymczasowa_1_Zmienione['accountData'], $user); }
}
if (!in_array($user, $plik_referencyjny_json['accountData'])) { if (!in_array($user, $tymczasowa_1_Zmienione['accountData'])) { array_push($tymczasowa_1_Nowe_Wspolne['accountData'], $user); }
}
}
// Tabela tymczasowa pliku drugiego
foreach ($plik_drugi_json['accountData'] as $user) {
foreach ($plik_referencyjny_json['accountData'] as $old_user) {
if ($old_user == $user) {
array_push($tymczasowa_2_Nie_Zmionione['accountData'], $user); } else
if ($old_user['UserID'] == $user['UserID'] && $old_user != $user) {
array_push($tymczasowa_2_Zmienione['accountData'], $user); }
}
if (!in_array($user, $plik_referencyjny_json['accountData'])) { if (!in_array($user, $tymczasowa_2_Zmienione['accountData'])) { array_push($tymczasowa_2_Nowe_Wspolne['accountData'], $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) {
array_push($wpolne_nie_zmienione['accountData'], $tym_1); }
}
}
// Nowe tylko dla pliku pierwszego
foreach ($tymczasowa_1_Nowe_Wspolne['accountData'] as $user) {
if (!in_array($user, $tymczasowa_2_Nowe_Wspolne['accountData'])) { array_push($tymczasowa_1_Nowe['accountData'], $user); }
}
// Nowe tylko dla pliku drugiego
foreach ($tymczasowa_2_Nowe_Wspolne['accountData'] as $user) {
if (!in_array($user, $tymczasowa_1_Nowe_Wspolne['accountData'])) { array_push($tymczasowa_2_Nowe['accountData'], $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) {
if ($old_user == $user) { array_push($wspolne_nowe['accountData'], $user); } }
}
// Wspólne dane
foreach ($wpolne_nie_zmienione['accountData'] as $user) {
array_push($tabela_koncowa['accountData'], $user); }
foreach ($wspolne_nowe['accountData'] as $user) {
array_push($tabela_koncowa['accountData'], $user); }
// Scalam dane (nowszy plik ma priorytet)
if ($ktory_plik_nowszy > 0 ) {
foreach ($tymczasowa_1_Zmienione['accountData'] as $user) {
array_push($tabela_koncowa['accountData'], $user); }
foreach ($tymczasowa_2_Zmienione['accountData'] as $user) {
$flaga = 0;
foreach ($tabela_koncowa['accountData'] as $newuser) {
if($newuser['UserID'] == $user['UserID']) { $flaga = 1; }
}
if ($flaga == 0
) { array_push($tabela_koncowa['accountData'], $user); } $flaga = 0;
}
} else {
foreach ($tymczasowa_2_Zmienione['accountData'] as $user) {
array_push($tabela_koncowa['accountData'], $user); }
foreach ($tymczasowa_1_Zmienione['accountData'] as $user) {
$flaga = 0;
foreach ($tabela_koncowa['accountData'] as $newuser) {
if($newuser['UserID'] == $user['UserID']) { $flaga = 1; }
}
if ($flaga == 0
) { array_push($tabela_koncowa['accountData'], $user); } $flaga = 0;
}
}
if ($ktory_plik_nowszy > 0 ) {
foreach ($tymczasowa_1_Nowe['accountData'] as $user) {
array_push($tabela_koncowa['accountData'], $user); }
foreach ($tymczasowa_2_Nowe['accountData'] as $user) {
$flaga = 0;
foreach ($tabela_koncowa['accountData'] as $newuser) {
if($newuser['UserID'] == $user['UserID']) { $flaga = 1; }
}
if ($flaga == 0
) { array_push($tabela_koncowa['accountData'], $user); } $flaga = 0;
}
} else {
foreach ($tymczasowa_2_Nowe['accountData'] as $user) {
array_push($tabela_koncowa['accountData'], $user); }
foreach ($tymczasowa_1_Nowe['accountData'] as $user) {
$flaga = 0;
foreach ($tabela_koncowa['accountData'] as $newuser) {
if($newuser['UserID'] == $user['UserID']) { $flaga = 1; }
}
if ($flaga == 0
) { array_push($tabela_koncowa['accountData'], $user); } $flaga = 0;
}
}
return $tabela_koncowa['accountData'];
}
print_r(compare_3_files
($plik_referencyjny, $plik_pierwszy, $plik_drugi));
$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);
Ten post edytował topcio 7.01.2023, 13:58:29