0

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

$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

我是否在我的代码中遗漏了一些使这篇文章发表两次的东西?

4

2 回答 2

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"];
}
于 2013-04-20T14:54:23.180 回答
3

是的,您正在循环一个在您的代码中立即被销毁的数组:

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

$res=mysql_query($sql);

假设一切顺利,您从 $res 指向一个 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"];
}
于 2013-04-20T15:05:07.033 回答