2010-06-22 143 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