2013-03-20 32 views
8

Bu kodu vardır. Farklı fetch_styles denedim.PDO ilişkisel diziler dönüş ilişkisel

bazı farklı stilleri denedim ve benzeri alabilir:

[0] svenska 
[1] engelska 

ama hoşuma istiyorum:

[1] svenska 
[2] engelska 

(1 ve 2 veritabanında id değerlerini vardır)

Sanırım bir işlev oluşturabilir ve bunu FETCH_FUNC numaralı telefondan arayabilirim, ancak bunun da çok iyi olacağından emin değilim.

Yukarıdaki en iyi/en temiz yol mu?

+3

unuttu satırlar [$ row_num] [$ col_name] ' – jdstankosky

+0

Şimdi ne için soruyorsun anlıyorum. Lütfen özel sorgunuzu ele almak için güncellenmiş yanıtıma bakın. – jdstankosky

cevap

10

daha iyi yol varsa gerçekten emin değilim. Bunu deneyebilir misin?

$rows = $statement->fetchAll(PDO::FETCH_ASSOC); 

$languages = array(); 

function getLangs($col, $row) { 
    $languages[$col['id']] = $col['name']; 
} 

array_walk($rows, 'getLangs'); 

Foreach döngülerinde sorun yok. Aslında sahip olduklarını kullanırdım. Bundan daha temiz almak zordur ...

GÜNCELLEME:

sonra dikkatlice yeniden okuma ne GERÇEKTEN sormanız gereken böyle bir şekilde SORGUYU biçimlendirebilirsiniz olup olmadığıdır soru, bu sonuçlar farklı bir biçimde döndürülür.

normal SELECT sorgusunun döndürülür yolu thusly geçerli:

// Query result is only one row, with each 'id' as column name 
// And the 'name' from the same row as it's value... 

+---------+----------+-----+-----+-----+ 
|  1 |  2 | ... | ... | ... | 
+---------+----------+-----+-----+-----+ 
| svenska | engelska | ... | ... | ... | 
+---------+----------+-----+-----+-----+ 

$row = array(
    row_1 => array(
      1 => "svenska", 
      2 => "engelska", 
     ... => "...", 
     ... => "...", 
     ... => "..." 
    ) 
) 

$languages = $row[row_1]; 
$languages[$id] = $name; 

Ben: Bazı yolu BU gibi sorgusunun sonuç döndürmesi için

+----+----------+ 
| id |  name | 
+----+----------+ 
| 1 | svenska | 
| 2 | engelska | 
| .. |  ... | 
| .. |  ... | 
+----+----------+ 

$row = array(
    row_1 => array(
     id => "1", 
     name => "svenska" 
    ), 
    row_2 => array(
     id => "2", 
     name => "engelska" 
    ), 
    row_3 => array(
     id => "...", 
     name => "..." 
    ), 
    row_4 => array(
     id => "...", 
     name => "..." 
    ) 
) 

$row[$row_number][$column_name] = $value 

Ne soruyorsun olduğunu Tam olarak dürüst olmak gerekirse SQL'de CAN do this emin değilim. Yapabilseydin, buna karşı da tavsiye ederim. Bir ölçekleme masası için korkunç olurdu. Tablonuz statikse, neden daha önce bahsetmek istediğim şekilde biçimlendirmiyorsunuz? Neden bir içerme dosyasında sadece statik bir PHP dizisinde var? `O zaman $` tarafından referans verebilir, siz `$ satır = $ Ġfade> fetchAll (PDO :: FETCH_ASSOC) do, PDO ile bir ilişkisel dizi dönmek istiyorsanız

+0

LOT teşekkürler! :-) Ne demek istiyorsun.Neden bunu içerme dosyasında statik bir PHP dizisine dahil etmeliyim? Bunun anlamı ne? – bestprogrammerintheworld

+0

@bestprogrammerintheworld Statik bir tablo olup olmadığını bilmiyordum, dilleri her zaman orada olacak ve veritabanında yer almanın tek nedeni bir sorgu ile onları aramaktır, neden sadece bir dizi oluşturmuyor komut dosyasında el ile (yani., lang.php dahil), '? Yine, ben söz konusu tablo hakkında başka bir bilgim yok, bu yüzden sadece burada çıkarım. – jdstankosky

+0

Tamam, bahşiş için teşekkürler!: -) – bestprogrammerintheworld

13

Herkes

$sth->fetchAll(PDO::FETCH_KEY_PAIR); 
+0

Birden fazla sütunda çalışıyorsanız, bu daha iyi bir çözüm olabilir: '$ STH-> fetchAll (PDO :: FETCH_ASSOC); – dangre00