0

PHPを使用してプレイリストを作成しています。ディレクトリから 2 つのランダムな曲が選択され、その名前と場所が配列に格納され、json_encode() によってファイルに書き込まれます。

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

これはうまくいきます。一度に 2 曲ずつ、非常に長いプレイリストを作成できます。また、曲を削除したいので、削除するトラックのIDを投稿するAJAXを利用した削除ボタンがあり、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"...] になるのはなぜですか?

これを読んでくれてありがとう!どんな提案でも大歓迎です。これは私を夢中にさせています!

使用しているコードは次のとおりです。

<?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. unset で要素を削除してみてください
  2. var_dumpあなたまたはprint_r全体を前に行を追加して、コードをデバッグします(スレッドに投稿されていないので、自分で行ってください)json_encode

または、それは json_encode のバグであり、良くありません...

于 2010-10-11T08:44:01.670 に答える
1

パラメータ %02d を指定して php 関数 sprintf を使用して、2 桁または 3 桁のトラック ID をエンコードします。

これは私にとってはうまくいきました。

于 2011-02-27T18:33:33.987 に答える