PHP ile İki Dizi Arasındaki Farklı Value'ları Bulma
Merhaba PT.
Elimde 2 dizi var. Sıralamaları karışık fakat value'larında eşleştirebileceğim item_id
'ler var. ID'leri aynı olup item_content
'leri farklı olanları $sonuç
dizimdeki şekliyle almak istiyorum. Bir türlü çıkamadım işin içinden. :)
$dizi1 = [
0 => [
"item_id" => 4,
"item_content" => "prototurk"
],
1 => [
"item_id" => 2,
"item_content" => "prototurk"
],
2 => [
"item_id" => 3,
"item_content" => "prototurk"
],
3 => [
"item_id" => 1,
"item_content" => "prototurk"
]
];
$dizi2 = [
0 => [
"item_id" => 1,
"item_content" => "soru"
],
1 => [
"item_id" => 2,
"item_content" => "prototurk"
],
2 => [
"item_id" => 3,
"item_content" => "cevap"
],
3 => [
"item_id" => 4,
"item_content" => "prototurk"
]
];
$sonuc = [
0 => [
"item_id" => 1,
"item_content" => [
"old" => "prototurk",
"new" => "soru"
]
],
1 => [
"item_id" => 3,
"item_content" => [
"old" => "prototurk",
"new" => "cevap"
]
]
];
uasort($dizi1, fn($a, $b) => $a['item_id'] - $b['item_id']);
uasort($dizi2, fn($a, $b) => $a['item_id'] - $b['item_id']);
$new = array_map(function ($item1, $item2) {
if ($item1['item_content'] != $item2['item_content'])
return [
'item_id' => $item1['item_id'],
'item_content' => [
'old' => $item1['item_content'],
'new' => $item2['item_content']
]
];
return false;
}, $dizi1, $dizi2);
print_r(array_values(array_filter($new)));
veya
uasort($dizi1, fn($a, $b) => $a['item_id'] - $b['item_id']);
uasort($dizi2, fn($a, $b) => $a['item_id'] - $b['item_id']);
$dizi1 = array_values($dizi1);
$dizi2 = array_values($dizi2);
$sonuc = [];
foreach ($dizi1 as $i => $value) {
if ($value['item_content'] != $dizi2[$i]['item_content'])
$sonuc[] = [
'item_id' => $value['item_id'],
'item_content' => [
'old' => $value['item_content'],
'new' => $dizi2[$i]['item_content']
]
];
}
print_r($sonuc);