[RESOLU] [tags id3] une boucle dans une boucle... pour un seul fichier?! oO

Petit nouveau ! | 4 Messages

26 mai 2021, 22:45

Bonjour / bonsoir (même que il est tard actuellement),

je viens à vous car j'ai un petit bout de code qui me titille les neurones et je ne sais pas, il me parait pas optimisé, et pour cause ; le temps que mets la page à se charger est affolant.
Comme écris dans le titre j'ai une boucle dans une boucle, tout cela pour extraire les data_tags des covers de mes fichiers mp3.
voici en gros ce que cela donne :

Code : Tout sélectionner

<?php foreach($fichier as $lien) { /*quelques instruction içi*/ foreach($data['tag']['picture'] as $image) { /*extraction du cover du fichier traité*/ } } ?>
j'ai tester un "if ($data['tag']['picture'] as $image) " mais cela ne fonctionne pas.
j'ai penser aussi à un FOR (connaissant le nombre de fichier à traiter, 1 seul, une boucle ne semble donc pas être conseillée.)
Du coup je ne sais pas comment faire sans cette boucle interne.

Si vous avez une idée un début de piste ou un exemple je suis preneur. Merci.
Dioscurde.

Mammouth du PHP | 2703 Messages

26 mai 2021, 23:15

faire une boucle quand ce n'est pas nécessaire car il n'y aura qu'une seule itération, n'est pas ce qui cause la lenteur du chargement de la page.

il faut donc regarder dans le reste du code ce qui est lent, et s'il n'y a pas moyen d'éviter ce qui est lent, faire en sorte que l'instruction lente soit exécutée moins de fois dans le script, en appellent plusieurs fois le script avec des données différentes à chaque fois.

Petit nouveau ! | 4 Messages

26 mai 2021, 23:40

ok d'accord... je me dis que p-e c'est le temps de lire et d'écrire +de 500 cover qui dois faire que c'est lent (c'est fou les données que cela contient juste pour une image, alors +de 500... )
édit : pardon pour mon impolitesse :priere: :arrow: Merci d'avoir pris le temps de me répondre.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 mai 2021, 13:50

Salutations !

Comme indiqué par or1, ton fichier mp3 ne peut avoir qu'une seule couverture et n'aura qu'un seul tag picture. Il n'est donc pas nécessaire de faire un foreach pour parcourir celui-ci et tu n'étais pas loin avec le if, c'est juste que la syntaxe n'était pas bonne (puisque tu ne boucles pas sur des éléments, tu ne peux pas les affecter avec un AS comme pour un foreach).

Tu peux l'écrire ainsi :
if (!empty($data['tag']['picture'])) {
   $image = $data['tag']['picture'];
   /*extraction du cover du fichier traité*/
}
Mais comme indiqué par or1, tu ne gagneras pas grand chose à l'exécution. Est-ce que tu utilises id3_get_tag() pour lire tes tags ou autre chose ? Est-ce que tu ne prends en compte que les nouveaux fichiers (pour éviter d'extraire plusieurs fois la même information) ? Il y a peut être moyen d'optimiser le traitement à ce niveau là...

Après, je ne sais pas ce que tu fais de ces informations ensuite,
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 4 Messages

01 juin 2021, 07:33

Salutations !

Est-ce que tu utilises id3_get_tag() pour lire tes tags ...
En fait j'utilise un script capté sur le web (juste pour le cover) : "mp3data.php".
_Bien vu le "!empty"_

Avatar du membre
Eléphant du PHP | 70 Messages

02 juin 2021, 15:25

Je rajouterais que si tu n'as qu'un élément à récupéré, casse ton foreach avec un return / exit / break une fois l'exécution terminé. De cette façon, si ton if à matché au bout de l'élément 50 sur 500 par exemple, il ne vérifiera pas inutilement les 450 autres vu que tu n'en à qu'un de correct. J'ai était clair ? :?: #-o
" La révolution informatique fait gagner un temps fou aux Hommes, mais ils le passent avec leur ordinateur ! " by Khalil Assala

Petit nouveau ! | 4 Messages

21 juin 2021, 18:50

Je rajouterais que si tu n'as qu'un élément à récupéré, casse ton foreach avec un return / exit / break une fois l'exécution terminé. De cette façon, si ton if à matché au bout de l'élément 50 sur 500 par exemple, il ne vérifiera pas inutilement les 450 autres vu que tu n'en à qu'un de correct. J'ai était clair ? :?: #-o
Je répond encore tardivement, désolé.
Merci pour l'astuce =D> un petit break et ca repart :)