v2.5.2
Giriş yap

PHP Optgroup Algoritma Sorunsalı

jct
407 defa görüntülendi

Başlık pek olmadı galiba, şimdiden kusura bakmayın,

Sorunum şu sekilde, DB'den çekilen verileri bir Select içerisinde listeliyorum. DB Sütünlarından biri Date sütunu.

Select içerisindeki verileri Date sütünuna göre (Ay-Yıl) olarak gruplamak <optgorup> kullanmak istiyorum ancak bir türlü olmadı.

PHP kod örneğim aşağıdaki gibi;

$DataCount = 1;

foreach($SQLData as $Data):

	echo "<option value='".$Data -> Data_ID."'>";
		echo sprintf("%04s", $DataCount);
		echo "[".$Data -> Data_Name."]";
		echo "[".$Data -> Data_Date."]";
		echo "[".$Data -> Data_Status."]";
	echo "</option>\n";

	$DataCount++;

endforeach;
ebykdrms
953 gün önce

Merhaba. Ekrana yazdırma işleminden önce gruplama işlemini gerçekleştirebiliriz.

<?php
// Gruplanmış haldeki verileri tutacak boş bir array oluşturuyorum:
$optionGroups = [];

// Gruplama işini ayrı bir foreach döngüsünde yapıyorum:
$dataCount = 1;
foreach($sqlData as $data) {
    // Sadece daha iyi görmek için verileri değişkenlere alıyorum.
    $thisDataId = $data->Data_ID;
    $thisDataCount = sprintf("%04s", $dataCount++);
    $thisDataName = $data->Data_Name;
    $thisDataDate = $data->Data_Date;
    $thisDataStatus = $data->Data_Status;
    
    // MySQL'den Date türünde gelen veriyi parçalayıp ay ve yıl bilgisini alıyorum.
    $thisDateParts = explode("-", $thisDataDate);
    $monthOfThisDate = $thisDateParts[1];
    $yearOfThisDate = $thisDateParts[0];
    
    // Ay ve yıl olarak gruplandıracağım için bu iki veriyi birleştiriyorum. Örn: "5-2022"
    $groupName = "$monthOfThisDate - $yearOfThisDate";
    
    // Eğer daha önce bu isimli bir grup oluşturulmamışsa şimdi boş halde ben oluşturuyorum:
    if(!isset($optionGroups[$groupName])) $optionGroups[$groupName] = [];
    
    // Verileri bu gruba ekliyorum:
    $optionGroups[$groupName][] = (object)[
        "value"=>$thisDataId,
        "text"=>"$thisDataCount[$thisDataName][$thisDataDate][$thisDataStatus]"
    ];
}

// Veriler gruplanmış halde $optionGroups içinde duruyor. 
// $optionGroups şu anda her elemanı object olan bir named array.
// Verileri html kodu şekline getiriyorum:
foreach($optionGroups as $groupName=>$groupItems) {
    echo "<optgroup label='$groupName'>";
    foreach($groupItems as $item) echo "<option value='{$item->value}'>{$item->text}</option>";
    echo "</optgroup>";
}

Kodları test etmedim. Hatalar olabilir.