2009-10-12 47 views
1

所以即時通訊有問題(顯然)。我有以下MySQL表格數據php函數返回包含數組的sql結果,作爲數組

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 

我寫了一個函數來檢索數據並返回它。

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; 
} 

當我打電話的功能,如下

$info = ShowSetTeams("USER1"); 

我得到這個

ArrayArrayArray 

我試圖呼應$信息[0],$信息[1],$信息[2],但得到這個

Arr 

因此信息數組中的每一行是結果數組。我應該可以做$ info [0] [0]並從第一個結果中得到第一個ID值?

Fatal error: Cannot use string offset as an array 

Im in a loss。 我怎樣才能得到每個返回數組的值?而且更重要的是,我怎麼能對它們運行在foreach操作

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

回答

5

你正在使用的不是陣列符號的字符串連接:

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

你也應該初始化$push = array();然後開始使用它。

你也做了很多額外的工作......你可能只是這樣做:

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; 
} 

除非你有,我也不會用它重新關鍵是一個數字索引數組要麼 - 你只是在後面的代碼中更難理解。使用mysql_fetch_assoc()要做到這一點

+0

我稍後會進一步探討,但感謝您的建議。儘管現在已經太晚了,但現在切換全部。 – mrpatg 2009-10-12 08:07:23

+0

嗨格雷格,你爲什麼使用array_values?會不會解除數組關聯?他似乎希望將信息作爲關聯數組。那麼爲什麼不只是'$ push [] = $ row'? – markus 2009-10-12 08:09:07

+0

@tharkun我使用了array_values,因爲@ Patrick的代碼是這樣的 – Greg 2009-10-12 08:14:28

1

,不要串聯的$推,但使用

$push[] = array(); 

return $push; 

其他一些言論:

  • 數據庫架構是不能正常歸!你不應該在你的表中存儲用戶ID的字符串,而是在隊表和玩家表之間引用一個多對多的表。

  • 你絕不應該(幾乎從不)在查詢中使用*選擇器。你用這個建立陷阱。而是指出您想要檢索的確切列。

  • 你可以得到相同的信息,而不必自己把$ push數組放在一起。如果數據庫列都是正確的,你可以使用一個FETCH_ASSOC,只是做$push[] = $row

1

我認爲他們的問題是與線:

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

這會將$推動作爲一個字符串並連接一個數組它變成一個字符串。嘗試:

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

您正在使用將數組轉換爲字符串的string concatenation and assignment operator .=。試試陣推運營商$array[]代替:前

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; 
} 
1
  1. 您應該使用的mysql_fetch_assoc()代替mysql_fetch_array()
  2. 你應該$push = array();定義$推爲陣「而」
  3. 你應該代替use $push[] = ...$push .= ...