2012-04-18 107 views
-1
SELECT a.uid, a.name_f, a.name_l, b.position FROM users a, room_members b WHERE a.uid = b.userid AND b.room_id=$room_id 

我有上面的查詢,選擇基於room_id的某個用戶的名稱,uid,個人資料圖片和位置,並且我想返回一個while循環動態地將以下變量分配給在我的查詢中返回的任何位置。基於sql查詢在while循環中動態創建變量

$position1_name_f 
$position1_name_l 
$position1_uid 
$position1_pic 

$position2_name_f 
$position2_name_l 
$position2_uid 
$position2_pic 

因此,舉例來說,如果4位和8位是數據中唯一的返回,它將返回以下變量,我將能夠在我的腳本自由使用論文的變量。

$position4_name_f 
$position4_name_l 
$position4_uid 
$position4_pic 

$position8_name_f 
$position8_name_l 
$position8_uid 
$position8_pic 

最多會有10個位置。我非常需要這些變量,因爲我使用它們與網站的佈局密切相關,並且我沒有辦法做一個簡單的while循環回聲;否則,一切都會容易得多。

我試過使用變量變量,我也嘗試過部署一個計數器,但無法獲得任何工作。

我開始了下面的查詢,非常感謝您的幫助。謝謝

$room_members=mysql_query("SELECT a.uid, a.name_f, a.name_l, b.position FROM users a, room_members b WHERE a.uid = b.userid AND b.room_id=$room_id"); 
while($members_sql=mysql_fetch_array($room_members)) 
{ 
//Need some dynamic variables here... 
} 
+0

在我最後11個問題中,我接受了10個答案。所以,非常感謝您提供了非常有用的建議,但請不要在完全不瞭解事實的情況下提供建議。 – user1011713 2012-04-18 19:34:27

+0

如果有人使用這個問題的答案,下面的函數在搜索數組的時候效果很好:function search($ array,$ key,$ value) { $ results = array();如果(isset($ array [$ key])&& $ array [$ key] == $ value) if(is_array($ array)) { $ results [] = $ array; foreach($ array as $ subarray) $ results = array_merge($ results,search($ subarray,$ key,$ value)); } return $ results; } 禮貌http://stackoverflow.com/questions/1019076/how-to-search-by-key-value-in-a-multidimensional-array-in-php – user1011713 2012-04-18 20:01:21

+0

'此用戶已接受答案14個符合條件的問題中有9個不是10個; 11)-) – 2012-04-18 21:49:00

回答

2

你做錯了!

這就是array s爲爲:

$result = array(); 

$result[1] = array('name_f' => 'data', 
        'name_l' => 'data', 
        etc, 
        ); 

從您的評論:

但我將如何去檢查的位置是否設置或返回空?基本上,我需要的,如果(isset(POSITION_1)){秀position_1_name_f}

if (isset($result[1])) { 
    echo $result[1]['name_f']; 
} 

那麼你可以做的是:

$members = array(); 

$room_members = mysql_query("SELECT a.uid, a.name_f, a.name_l, b.position FROM users a, room_members b WHERE a.uid = b.userid AND b.room_id=$room_id"); 
while($members_sql=mysql_fetch_assoc($room_members)) { 
    $members[] = $members_sql; 
} 
+0

但是,我將如何去檢查一個位置是否已設置或返回空?我基本上需要 if(isset(position_1)){show position_1_name_f} – user1011713 2012-04-18 19:07:40

+0

@ user1011713更新了我的答案:) – PeeHaa 2012-04-18 19:09:37

+0

對不起,我仍然不清楚如何在while循環中分配多個數組。 – user1011713 2012-04-18 19:16:04

1

爲什麼不使用數組爲這個或實現迭代器的對象?

應該更容易:)

1

你可以建立變量名像這樣的字符串:

$i = 1; 
while($members_sql=mysql_fetch_array($room_members)) 
{ 
    $variablebase = 'position'.$i++.'_'; 
    $variablename = $variablebase.'name_f'; 
    $$variablename = $members_sql['name_f']; 
} 

此後$ positionX_name_f被聲明。

但不是一個更好的解決方案?

+0

Yuck!最後一句被保存在那裏;-) – PeeHaa 2012-04-18 19:01:08

+0

嘿... PHP是一種語言,其中'(「61529519452809720693702583126814」==「61529519452809720000000000000000」)'實際上返回true,所以不要因爲人們做醜陋的事情而生氣:P – bardiir 2012-04-18 19:07:27

+0

這將返回position_1_name_f,但如果position_1未設置,它仍然會根據返回的另一個位置設置此變量。例如,如果這些是唯一返回的,我需要position_10_name_f和position_4_name_f。用你的代碼,我認爲position_1_name_f和position_2_name_f會被設置。 – user1011713 2012-04-18 19:09:55