PHP动态数组显示双

时间:2014-11-19 02:01:44

标签: php mysql arrays mysqli

我目前正在制作一个媒体播放列表网站,两个单独的音频和视频页面。

这是使用javascript:

动态加载到页面中的playlist.php
$sql = new mysqli('localhost', 'root', '', 'bunnytwitchy');
if (mysqli_connect_errno()) {
  printf("Connect failed: %s\n", mysqli_connect_error());
  exit;
}

$query = "SELECT * FROM `playlist` WHERE `playlistname`='playlist 1'";
$result = $sql->query($query);     
if (!$result) {
  printf("Query failed: %s\n", $mysqli->error);
  exit;
}

while($row = $result->fetch_row()) {
  $rows[]=$row;
}

foreach($rows as $row) {
  $mediaid = $row[1];
  $query = "SELECT * FROM `media` WHERE `id`='$mediaid'";
  $result = $sql->query($query);
  if (!$result) {
    printf("Query failed: %s\n", $mysqli->error);
    exit;
  }

  while($playlistlist = $result->fetch_row()) {
    $playlist[]= $playlistlist;
    print_r($playlist);

  }
}

我从两个表中选择*的原因是,我正在从播放列表表和媒体表中收集信息。

在获取两个表信息时,我试图将播放列表歌曲ID与媒体ID进行比较,以便知道播放列表中的哪些歌曲和信息。

我的数据库结构是:

db: bunnytwitchy
tables: playlist, media
playlist: playlistid, mediaid, playlistname
media: id, type, band, song, album, path

在上面的代码中,playlistid与媒体id进行比较,以了解哪些歌曲在播放列表中。媒体类型是确定视频/音乐。路径是媒体文件位置。

现在我的媒体信息数组工作得很好,除了它显示第一个匹配的ID两次:

Array
(
    [0] => Array
        (
            [0] => 3
            [1] => video
            [2] => band2
            [3] => song2
            [4] => album1
            [5] => video/3.mp4
        )

)
Array
(
    [0] => Array
        (
            [0] => 3
            [1] => video
            [2] => band2
            [3] => song2
            [4] => album1
            [5] => video/3.mp4
        )

    [1] => Array
        (
            [0] => 1
            [1] => video
            [2] => bandname
            [3] => songname
            [4] => album
            [5] => video/2.mp4
        )

)

缺少id 2的原因是因为它是音乐文件而不是视频。

我希望那里有人可以帮我弄清楚为什么它会在数组中显示第一个匹配的id两次,以及我可以如何修复它

感谢所有帮助!感谢

1 个答案:

答案 0 :(得分:0)

这是因为你在循环中有print_r($playlist);。如果您有3个播放列表,则会显示3个数组(1,1 + 2,1 + 2 + 3)。

将其移到外面:

while($playlistlist = $result->fetch_row()) {
    $playlist[]= $playlistlist;
}
print_r($playlist);

甚至更好,将其移到foreach($rows as $row) { .. }循环

之外