bir dizi olarak, diziler içeren sql sonuçlarını döndürmek için php fonksiyonu

4 Cevap php

Yani bir sorun (besbelli) sahip im. Ben aşağıdaki MySQL tablo verileri

7   USER1  		1,1,1,10,1  	The Guys Team  	8,7,13,14,16
8    USER1 	  	1,1,1,10,1 	The Girls Team 	7,12,15
10  USER1 		1,1,1,10,1 	Dog Team 	8,7,14,15

Ben veri almak ve geri dönmek için bir fonksiyon yazdım.

function ShowSetTeams($coach){
	$result = mysql_query("SELECT * FROM `teams` WHERE coach = '$coach'") or trigger_error(mysql_error()); 
	while($row = mysql_fetch_array($result)){ 
		foreach($row AS $key => $value) { $row[$key] = stripslashes($value); } 
			$id = $row['id'];
			$teamname = $row['teamname'];
			$team = $row['team'];
			$event = $row['event'];
			$push .= array($id, $teamname, $team, $event);
	}
	return $push;
}

I aşağıdaki gibi, işlevini çağırdığınızda

$info = ShowSetTeams("USER1");

Ben bu olsun

ArrayArrayArray

I [0], $ info [1], ve $ bilgi [2], ancak bu olsun $ bilgi yankılanan çalıştı

Arr

Yani bilgi dizisindeki her satır, sonuç dizidir. I [0] [0] $ bilgi yapmak mümkün ve doğru ilk sonucu gelen, ilk ID değerini almak gerekir?

Fatal error: Cannot use string offset as an array

Zararına Im. Noktasına How can i get to each of the values of the returned arrays? ve devamı, how could i run a foreach operation on them gibi

foreach( $info as $key => $value){
$key[0] //ID
$key[1] //TEAMNAME
$key[2] //TEAM
$key[3] //EVENT
}

4 Cevap

Yerine dizi gösterimde dize birleştirme kullanıyorsanız:

$push[] = array($id, $teamname, $team, $event);

Bunu kullanmaya başlamadan önce de $push = array(); initialise gerekir.

Ayrıca ekstra bir sürü iş yapıyoruz ... sadece yapabileceği:

function ShowSetTeams($coach)
{   
    $push = array();
    $result = mysql_query("SELECT id, teamname, team, event FROM `teams` WHERE coach = '$coach'") or trigger_error(mysql_error());
    while($row = mysql_fetch_array($result, MYSQL_NUM))
    {
    	// I doubt you actually need to run stripslashes on your data...
    	$row = array_map('stripslashes', $row);
    	$push[] = $row;
    }

    return $push;
}

Sen, ben ya da bir sayısal Dizinlenmiş diziye yeniden tuşunu kullanmak olmaz zorunda sürece - sadece daha sonra kodu anlamak zor yapıyoruz. Bunu yapmak için mysql_fetch_assoc() kullanın

Ben sorun hattı ile olduğunu düşünüyorum:

 $push .= array($id, $teamname, $team, $event);

Bu bir dizge olarak $ itme davranır ve bir dize dönüştü alır bir dizi birleştirir. Deneyin:

 $push[] = array($id, $teamname, $team, $event);

Bunun yerine bir string concatenation and assignment operator .= that will convert your arrays into strings. Try the array push operator $array[] kullanıyorsanız:

function ShowSetTeams($coach) {
    $result = mysql_query("SELECT * FROM `teams` WHERE coach = '$coach'") or trigger_error(mysql_error()); 
    $array = array();
    while ($row = mysql_fetch_assoc($result)) {
        $array[] = array(stripslashes($row['id'], stripslashes($row['teamname'], stripslashes($row['team']), stripslashes($row['event']));
    }
    return $array;
}

$ Itme birleştirmek ama kullanmayın

$push[] = array();

return $push;

Bir kaç diğer notlar:

  • Veritabanı şeması düzgün normalize değil! Eğer tabloda saklanan userids dizeleri var ama ekipleri masa ve oyuncular masa arasında bir başvuru çok-çok tablo var olmamalıdır.

  • sorgularda * seçici kullanabilirsiniz (neredeyse hiç) asla. Kendinizi buna tuzaklar kurmak. Bunun yerine almak istediğiniz tam sütunları gösterir.

  • Eğer $ itme Array kendinizi bir araya koymak zorunda kalmadan aynı bilgileri alabilir. Veritabanı sütunları düzgün adlı eğer bir FETCH_ASSOC kullanmak ve sadece do $push[] = $row olabilir