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"
]
]
];
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (3)
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);
Kısa yazmak için arrow function kullanmak istedim ve sizin de söylediğiniz gibi PHP 7.4 sürümünde eklenen bir özellik olduğu için eski sürümlerde hata verir.
https://www.php.net/manual/en/functions.arrow.php
Normal function şekliyle de kullanabilirsiniz.
uasort($dizi1, function($a, $b) {
return $a['item_id'] - $b['item_id']
});
@abdullahx hocam,
uasort($dizi1, fn($a, $b) => $a['item_id'] - $b['item_id']);
uasort($dizi2, fn($a, $b) => $a['item_id'] - $b['item_id']);
kısmında hata alıyorum ama bu fonksiyonu daha önce de görmediğim için nasıl kullanıldığını bilmiyorum o yüzden anlayamadım da hatanın nerede olduğunu. :)
- D Ü Z E N L E M E -
PHP sürümü 7.2'deydi, 7.4'e yükselttim hata gitti.
@abdullahx hocam çok teşekkür ediyorum diziler konusunda çok yardımın dokunuyor. :)