【问题标题】:PHP Dynamic Array Displaying DoublePHP动态数组显示双精度
【发布时间】:2014-11-19 02:01:43
【问题描述】:

我目前正在开发一个媒体播放列表网站,有两个独立的音频和视频页面。

这是使用 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 进行比较,以了解播放列表中有哪些歌曲。媒体类型是确定视频/音乐。 Path 是媒体文件的位置。

现在我的媒体信息数组运行良好,除了显示第一个匹配的 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 两次,以及如何修复它

感谢所有帮助!谢谢

【问题讨论】:

    标签: php mysql arrays mysqli


    【解决方案1】:

    这是因为循环中有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) { .. } 循环之外

    【讨论】:

    • 感谢您的快速回复,非常有意义,经过尝试和工作。我现在感觉有点笨>.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2013-05-15
    • 1970-01-01
    • 2015-09-13
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多