2010-10-11 8 views
0

Im utilisant PHP pour créer une playlist. Deux chansons aléatoires sont choisies dans un répertoire, et leur nom et leur emplacement sont stockés dans un tableau puis écrits dans un fichier via json_encode().Liste de lecture musicale via PHP. json_encode() limite de tableau?

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

Cela fonctionne très bien. Je peux faire une playlist très longue, deux chansons à la fois. Id aime également à supprimer des chansons, donc j'ai un bouton de suppression AJAX alimenté, qui publie l'ID de la piste à supprimer, PHP puis charge toute la tracklist ...

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

et supprime le morceau donné de la matrice, puis re-encode et réécrit le fichier texte json. Tout cela fonctionne très bien.

Le problème vient chaque fois que je tente de supprimer quoi que ce soit avec une liste de plus de 10 articles.

En règle générale, mon fichier song.json va [{nom: Song1, mp3: url chanson}, {nom: song2, mp3: url song2}] Cependant, quand j'ai une liste de plus de 10 articles, les re playlist encodée ressemble à ceci:

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

Pourquoi mon recodé tableau obtenir cette étrange [10, { "name" ... [11, { "name" ... [12, { "name" ... mais tout en dessous de 10 est toujours bien?

Merci de lire ceci! Toutes les suggestions seraient grandement appréciées, cela me rend fou!

Voici le code im utilisant:

<?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); 
?> 
+0

Comment supprimer un élément? Cela me fait penser que: http://www.php.net/manual/fr/fonction.json-encode.php#99457 – MatTheCat

Répondre

1
  1. essayez de supprimer des éléments avec unset
  2. debug votre code (non affiché dans le fil, alors faites-le vous-même) en ajoutant une ligne où vous var_dump ou print_r la chose avant json_encode

ou il est un bogue dans json_encode qui ne serait pas agréable ...

1

Coder l'ID de piste sur 2 ou même 3 chiffres en utilisant la fonction PHP sprintf avec le paramètre% 02d.

Cela a bien fonctionné pour moi.