2010-06-22 113 views
1

我有下面的代碼,並要手動選擇一個數組:PHP陣列選擇

<?php 

$articleQuery = mysql_query("SELECT * FROM articles WHERE topic = 'IT' "); 


while($article= mysql_fetch_array($articleQuery)){ 
    $aid = $article['id']; 
    $media = $article['media']; 
    $link = $article['link']; 
} 


echo $aid[0]; 

?> 

的問題是,它不是真正的選擇/顯示正確的信息。我想要的是能夠選擇第一個數組的值。

在此先感謝。

+0

你只想要1個數組?還是你想要一個方法中的第一個數組,你可以訪問它,以及其他數據? – trueheart78 2010-06-22 18:16:31

+1

$ aid正在覆蓋循環的每一次迭代。 在您的最後一行中,您正在數組上下文中使用文章ID,它是一個字符串。這會給你上一篇文章ID號的第一個字符。所以,如果你上一篇文章的ID爲12345,你的echo會打印出'1'; – racerror 2010-06-22 18:25:59

回答

1
$firstrow = null; 
while($article= mysql_fetch_array($articleQuery)) { 
    if ($firstrow === null) 
     $firstrow = $article; 

    $aid = $article['id']; 
    $media = $article['media']; 
    $link = $article['link']; 
    //manipulate $aid, $media and $link. 
} 

//manipulate $firstrow 

如果你只需要在第一行,限制查詢到一個結果和執行mysql_fetch_array最多一次,而不是在一個循環。

+0

我不想被限制爲選擇第一個數組。 我想能夠選擇陣列的任何位置。 這樣做:$ aid [0]應該可以工作,但由於某種原因,它只能在該數組中顯示單個字符的信息。 我不想重置數組計數器,因爲我想能夠使用它們中的任何一個。 – Farax 2010-06-22 18:14:29

+0

@Farax這是一個新的要求。然後與@ Sarfraz的答案。謹防你將整個結果保存在記憶中,如果可以的話,你應該避免這樣做。另外,你應該使用mysqli擴展。 – Artefacto 2010-06-22 18:16:18

1

或者你可以這樣做:

$array = array(); 
while($article = mysql_fetch_object($articleQuery)){ 
    $array[] = $article; 
} 

echo $array[0]->id; // get first id 
echo $array[0]->media; // get first media 
echo $array[0]->link; // get first link 

echo $array[1]->id; // get second id 
echo $array[1]->media; // get second media 
echo $array[1]->link; // get second link 
// and so on....... 
0

,如果你想$援助是一個數組,你應該做這樣的事情:

$aid = array(); 
while($article= mysql_fetch_array($articleQuery)){ 
    $aid[] = $article['id']; 
} 
+0

這就是我在找的東西。非常感謝你! – Farax 2010-06-22 18:17:03

0

的問題是,它不是真的 選擇/顯示正確的 信息。我想要的是能夠 選擇第一個 數組的值。

你想要的是propably這樣的:

$articleQuery = mysql_query("SELECT * FROM articles WHERE topic = 'IT' "); 
$article= mysql_fetch_array($articleQuery); 
echo $article[0]; 

您有不必要的循環。您還可以將「限制1」添加到sql查詢中。雖然我不確定我是否正確理解你的目標。

0

使用mysql_fetch_assoc,將使用字段名稱作爲數組索引器,所以$ article ['id']而不是$ article [0]。這樣,如果您通過添加新列來更改表格的定義,那麼您的代碼不會中斷!

$articleQuery = mysql_query("SELECT * FROM articles WHERE topic = 'IT' LIMIT 1"); 
$article= mysql_fetch_assoc($articleQuery); 
var_dump($article); 
0

如果你真的只想要第一個結果:

$articleQuery = mysql_query("SELECT * FROM articles WHERE topic = 'IT' LIMIT 1"); // note LIMIT clause 
if(false !== ($article = mysql_fetch_array($articleQuery))) 
{ 
    $aid = $article['id']; 
    $media = $article['media']; 
    $link = $article['link']; 
} 
echo $aid; 

如果你希望他們所有,但可轉位:

$articleQuery = mysql_query("SELECT * FROM articles WHERE topic = 'IT' "); 
while($article= mysql_fetch_array($articleQuery)) 
{ 
    $aid[] = $article['id']; 
    $media[] = $article['media']; 
    $link[] = $article['link']; 
} 
echo $aid[0]; 
0

爲什麼不修改SQL語句只選擇一個項目?

mysql_query("SELECT * FROM articles WHERE topic = 'IT' LIMIT 1"); 

但是,你的代碼中的錯誤是,你正在循環所有選定的記錄,覆蓋每次通過你的變量。如果你想存儲的所有行作爲一個數組,你應該修改你的語法是這樣的:

while($article= mysql_fetch_array($articleQuery)){ 
    $aid[] = $article['id']; 
    $media[] = $article['media']; 
    $link[] = $article['link']; 
} 

...之後,你可以用aid[0]訪問的第一行。

而是我想提出一個不同的結構:

while($article= mysql_fetch_array($articleQuery)){ 
    $articles[]['aid'] = $article['id']; 
    $articles[]['media'] = $article['media']; 
    $articles[]['link'] = $article['link']; 
} 

,做什麼,是所有的數據收集到一個單一的數據結構,其中每個記錄保存所有相關的文章中的數據。你會訪問它是這樣的:如果這看起來像希伯萊你

echo $articles[0]['aid']; 
echo $articles[0]['media']; 
echo $articles[0]['link']; 

,看看在PHP manual section for arrays