2013-04-20 56 views
0

刚刚掌握处理foreach循环。对于每一行,我都在$ array中设置'vine'和'mp4',但是当我回显这些值时,他们会发布两次。这里是我的代码:foreach echo两次?

$sql="SELECT vine_id,mp4_url FROM videos LIMIT 1"; 

$res=mysql_query($sql); 

while($row=mysql_fetch_assoc($res)){ 
    foreach ($row as $array) { 
     $array=array(
      "vine"=>$row['vine_id'], 
      "mp4"=>$row['mp4_url']); 
      echo $array["vine"]; 
      echo $array["mp4"]; 
    } 
} 

这里是我的输出:

bUjdjmFHt5I //vine 
https://vines.s3.amazonaws.com/v/videos/2013/04/20/A42066A1-EC83-4211-BA20-DAD287C8AF1E-362-0000002797BBAC52_1.0.7.mp4?versionId=oMGICGs2c7dCbodVIHHiaQ1MhqKg65.y //mp4 

bUjdjmFHt5I //vine 
https://vines.s3.amazonaws.com/v/videos/2013/04/20/A42066A1-EC83-4211-BA20-DAD287C8AF1E-362-0000002797BBAC52_1.0.7.mp4?versionId=oMGICGs2c7dCbodVIHHiaQ1MhqKg65.y //mp4 

我失去了我的代码,使真实这个帖子两次的东西吗?

+0

foreach循环是多余的,它返回的行中的每一列循环结束了,但你并不需要根据您的代码来做到这一点。只需使用while循环 – 2013-04-20 14:55:12

回答

3

是的,你遍历该被立刻在你的代码摧毁一个数组:

$sql="SELECT vine_id,mp4_url FROM videos LIMIT 1"; 

$res=mysql_query($sql); 

假设一切顺利,你开始$水库指向一个MySQL的资源,将只提供一个结果集。

while($row=mysql_fetch_assoc($res)){ 

您正在提取此结果集。 $ row现在是一个包含两个键vine_id和mp4_url的数组。

foreach ($row as $array) { 

现在您将两个键值分配给$ array,一个接一个。你有两个键,这个循环将运行两次。

 $array=array(
      "vine"=>$row['vine_id'], 
      "mp4"=>$row['mp4_url']); 

现在您销毁由foreach分配的值并用$ row中的值覆盖它。

你真的只能创建一个具有稍微不同的键名的数组副本。

 echo $array["vine"]; 
     echo $array["mp4"]; 

循环运行两次,回声出现两次,内容相同。

 } 
} 

你真正想要的是什么:

// Use alias in SQL to get the array keys you want 
$sql="SELECT vine_id as vine, mp4_url as mp4 FROM videos LIMIT 1"; 

$res=mysql_query($sql); 

// assign the SQL result to a variable of your choice. 
while($array=mysql_fetch_assoc($res)){ 
    // No need to copy the array 
    echo $array["vine"]; 
    echo $array["mp4"]; 
} 
+0

精湛的答案,谢谢你斯文。真的帮助那些掌握循环等的人 – 2013-04-20 15:26:34

7

您正在循环两次。试试这个:

$sql="SELECT vine_id,mp4_url FROM videos LIMIT 1"; 

$res=mysql_query($sql); 

while($row=mysql_fetch_assoc($res)){ 
    $array = array(
     "vine" => $row['vine_id'], 
     "mp4" => $row['mp4_url'], 
    ); 
    echo $array["vine"]; 
    echo $array["mp4"]; 
} 
+0

谢谢antony,没有注册,虽然是完整的循环本身。谢谢,会接受你的答案在10〜 – 2013-04-20 14:59:24