v2.5.2
Giriş yap

dizi array dan gelen veriyi tarih verisine göre listeleme

kertmeyenkele
347 defa görüntülendi ve 1 kişi tarafından değerlendirildi

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?
			
			}
			
			}
    
ebykdrms
569 gün önce
// 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;
});