2012-02-28 134 views
1

我正在使用php从mysql表中获取一些数据。该表返回正确的结果,但因为表有很多列,我认为我可以创建for循环,并保存我所有的值为val1,val2等我首先使用while循环,因为可以有几行:size_of回答错误的答案

while($row1 = mysql_fetch_array($sql2)){ 
    for($i = 1; $i < sizeof($row1); $i++) { 
     $val.$i = $row1[$i]; 
    } 

但是由于某种原因,sizeof($ row1)返回40,而我在该表中只有18列。

我认为$val.$i = $row1[$i];是不是正确的方式来声明一个变量?

我知道我会犯一个愚蠢的错误,但我无法弄清楚。 :S

+0

您有40条记录? – ChristopheD 2012-02-28 22:38:18

+0

如果您的数据库中有18个编号的列,则应该查看您的数据库结构。 – 2012-02-28 22:39:00

+0

@ChtistopeD:不,我现在只有一个! – Namit 2012-02-28 22:39:17

回答

6

你要指定结果类型:

mysql_fetch_array($sql2, MYSQL_NUM); 

manual

通过使用MYSQL_BOTH(默认),你会得到既 关联数组和数字指数。

+0

这适用于我,但我只是意识到我的问题与'$ val。$ i = $ row1 [$ i];''而不是任何线索? – Namit 2012-02-28 22:56:54

+0

@Namit为什么你的计数从1开始?应该不是0而是? – 2012-02-28 23:12:25

+0

我想从第二栏开始获取数据,因为第一栏只是关键。 – Namit 2012-02-28 23:13:02

0

也可能有一些重复的值从您的$ sql2, 在您的选择使用DISTINCT关键字。

+1

这不会影响单行结果的数量。 – wallyk 2012-02-28 22:47:18

0

的文档的sizeof网页上窃取umopdn评论[在] MSN [DAWT] COM:

a)总是使用PHP的内部程序通过 不同类型的对象进行迭代...而不是你的解释代码循环通过 他们,他们使用自己的内部例程,这是更快。 (这就是为什么的foreach()将运行比手动更快互为作用)

...

三)我PixEye对言论的sizeof()同意。在PHP中,它只是真实函数count()的一个 别名。它在其他语言中逻辑上具有其他含义 ,而不是对象中元素的数量。 这应该避免,因为它可能会混淆开发人员从其他语言过渡到PHP的 。

你应该使用count()来支持sizeof(),但是否定的是你可以并且应该使用foreach()而不是for()。