只是处理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
我在代码中遗漏了两次这个帖子的内容吗?
答案 0 :(得分: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"];
}
答案 1 :(得分: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"];
}