dizi array dan gelen veriyi tarih verisine göre listeleme
arrayda veriyi şu şekilde tutuyorum
$array = "1234|4756|1|31.01.2023,5678|6453|2|01.02.2023"
veri dizisini kendi arasında virgül (,) ile ayırıyorum. her veri dizisini içinde | işareti ile ayırıyorum ve 4 bölümden oluşuyor.
buradaki verileri kullanarak array ile listeleme yapıyorum. istediğim array içerisinden gelen veriyi | işaretinden ayıklayarak tarihe göre almak ancak bunu başaramadım. (foreach) döngüsüne alıyorum ancak tarih haliyle karışık geliyor. nasıl yapabilirim?
örnek :
$array = "1234|4756|1|31.01.2023,5678,6453,2,01.02.2023"
for ($i2=0; $i2<$kactane2; $i2++) {
$urunler = explode(",", $array);
foreach ($urunler as $urunveri) {
$data = explode("|", $urunveri);
// BURAYA VERİLER GELİYOR. VE İŞLEMLERİ YAPABİLİYORUM.
// ANCAK BURADA GELEN VERİLER ARTIK AYRIŞTIRDIKTAN SONRA
// KARIŞIK TARİH İLE GELİYOR.
// TAM BU AŞAMADA TARİHİ NASIL SIRAYA ALIRIM?
}
}
// Giriş verilerimiz:
$array = "1234|4756|1|31.01.2023,5678|6453|2|01.02.2021"
// Düzenlenmiş array'i tutacak değişkenimiz:
$fixedArray = [];
// Önce "," karakterinden gruplara ayırıyoruz:
$groups = explode(",", $array);
// input ($array): "1234|4756|1|31.01.2023,5678|6453|2|01.02.2021"
// output ($groups): ["1234|4756|1|31.01.2023", "5678|6453|2|01.02.2021"]
// Sonra her grubu kendi içinde "|" karakterinden ayırıyoruz:
foreach($groups as $group) $fixedArray[] = explode("|", $group);
// input ($groups): ["1234|4756|1|31.01.2023", "5678|6453|2|01.02.2023"]
// output ($fixedArray): [["1234", "4756", "1", "31.01.2023"], ["5678", "6453", "2", "01.02.2021"]]
// Düzenlenmiş grubumuzu tarihe göre küçükten büyüğe sıralıyoruz:
usort($fixedArray, fn($a, $b) => strtotime($a[3]) <=> strtotime($b[3]));
// input ($fixedArray): [["1234", "4756", "1", "31.01.2023"], ["5678", "6453", "2", "01.02.2021"]]
// output ($fixedArray): [["5678", "6453", "2", "01.02.2021"], ["1234", "4756", "1", "31.01.2023"]]
// Sonuç $fixedArray dizisinde bulunuyor:
print_r($fixedArray);
PHP'nin 7'den eski sürümlere uyumlu olması için usort()
fonksiyonu şöyle de olabilir:
usort($fixedArray, function ($a, $b) {
if(strtotime($a[3]) < strtotime($b[3])) return -1;
if(strtotime($a[3]) > strtotime($b[3])) return 1;
return 0;
});