2015-12-10 21 views
0

有没有办法让代码更清洁? 我想访问$query4week这样的行:$query4week[0]。 但mysqli_query()返回一个对象,我不知道如何访问它的特定行。因此,使用fetch_arrayfor循环,我决定创建我自己的索引。了解mysqli_fetch_array()

$sql2 = "SELECT * FROM meals ORDER BY RAND() LIMIT 7"; 
$query4week = mysqli_query($con, $sql2) or die(mysqli_error($con)); 
for ($i = 0; $result = mysqli_fetch_array($query4week, MYSQLI_ASSOC); $i++) 
{ 
    $meal4week[$i] = $result['meal']; 
} 

我仍然在学习PHP,但相当有OOP主题薄弱,请耐心等待:-)

回答

0

mysqli_query返回表示查询结果的资源。您需要使用mysql_fetch_*函数逐行遍历结果。所以是的,如果你对第一行感兴趣的话,你需要一些循环。

1

做,在这种方式

$i = 0; 
while ($result = mysqli_fetch_array($query4week, MYSQLI_ASSOC)) 
{ 
    $meal4week[$i] = $result['meal']; 
    $i++; 
} 

应该工作。

2

如果您获取关联数组,则不应该需要for循环。

$i = 0; 
while($row = mysqli_fetch_array($query4week, MYSQLI_ASSOC)) 
{ 
    $meal4week[$i] = $row['meal']; 
    $i++; 
} 
+0

如果错过了;第一次在$ i ++之后,严重地复制和粘贴;) –

+0

@justacoder fixed @@(ツ)_ /¯我已经回去修复我的打字时的引号,这里没有复制意大利面。 –

+0

mysqli_fetch_array在for循环中,可能缺少;可以.....;) –

1

这里已经有一些完全合理的答案,但是对于评论来说这有点长。如果您正在创建的是以索引0开头的数字索引数组,则不需要显式定义索引。

while($row = mysqli_fetch_array($query4week, MYSQLI_ASSOC)) { 
    $meal4week[] = $row['meal']; 
} 

应该工作得很好。不需要$i

+0

是的!但有时只是为了感觉或其他... –

+0

非常感谢您的回答 - 这是一个很好的选择,并且一定会使代码更清晰。但是我认为@ZeissS答案对我最有帮助,因为我不确定我是否做了一些过于复杂的事情,或者是否有另一个一次完成所有事情的获取函数。 – Lex

+0

这很有道理,这个答案是一个更好的解释。实际上有另一个fetch函数可以一次执行它(['fetch_all'](http://php.net/manual/en/mysqli-result.fetch-all.php)),但正如链接文档中所述,它仅适用于MySQL Native Driver Only。 –