0

我使用 PHP 创建播放列表。从一个目录中随机选择两首歌曲,它们的名称和位置存储在一个数组中,然后通过 json_encode() 写入文件。

$arraySongs[] = array('name' => $songName , 'mp3' => $webUrl);

这很好用。我可以制作一个很长的播放列表,一次两首歌。我也想删除歌曲,所以我有一个 AJAX 驱动的删除按钮,它发布要删除的曲目的 ID,然后 PHP 加载整个曲目列表......

$decoded = json_decode(file_get_contents($tracklist),true);

并从数组中删除给定的歌曲,然后重新编码并重新写入 json 文本文件。这一切都很好。

每当我尝试删除播放列表超过 10 个项目的任何内容时,都会出现问题。

通常,我的 song.json 文件是 [{name:song1,mp3:song url},{name:song2,mp3:song2 url}] 但是,当我有超过 10 个项目的列表时,重新编码的播放列表看起来像这个:

[{ ... },{name:song9,mp3:song9 url}],[10,{"name":song10,mp3:song10 url}]

为什么我的重新编码的数组会得到那个奇怪的 [10,{"name"... [11,{"name"... [12,{"name"... 但低于 10 的所有内容总是很好?

感谢您阅读本文!任何建议将不胜感激,这让我发疯!

这是我使用的代码:

<?php
$json = "song.php";
$decoded = json_decode(file_get_contents($json),true);
$playlist = array();
$names = array();

// Now Get i From Javascript
$i=$_POST['id'];

//Select i's Array
$collect_array=$decoded[$i];
    while (list ($key, $val) = each ($collect_array)) {
//Remove i's Values
//echo "<br />$key -> $val <br>";
unset($decoded[$i]);
}
//Take all the remaining arrays
$collect_array=$decoded;
    while (list ($key, $val) = each ($collect_array)) {
$arraySongs[] = array($key , $val);
}
// Our New Array ready for json.
$jsonData = json_encode($arraySongs);
// open song.php and scribble it down
$tracklist = $json;
$fh = fopen($tracklist, 'w') or die("can't open filename: $tracklist");
fwrite($fh, $jsonData);
fclose($fh);
?>
4

2 回答 2

1
  1. 尝试删除未设置的元素
  2. 调试你的代码(没有发布在线程中,所以自己做)通过在你之前var_dumpprint_r整个事情之前添加一行json_encode

或者这是 json_encode 中的一个错误,这不是很好......

于 2010-10-11T08:44:01.670 回答
1

使用带有参数 %02d 的 php 函数 sprintf 将轨道 ID 编码为 2 位甚至 3 位数字。

这对我来说很好。

于 2011-02-27T18:33:33.987 回答