8722 sujets

Développement web côté serveur, CMS

bonjour,

dans un code php je souhaite supprimer tous les éléments d'un tableau, sauf le premier.
J'ai pondu cette boucle, mais je me demandais si il n'existait pas une solution plus simple et plus élégante...
$photos est un tableau qui contient le résultat d'une requête.


	$skip = 1;
	foreach($photos as $photo):
	if ($skip < 1) {
	  unlink($photo->photo);
	}
	$skip--;
	endforeach;

Mouais, pas besoin de vérifier à chaque fois si tu es sur le premier élément, il te suffit de parcourir ton tableau à partir de la 2eme entrée. Mais bon ça change pas grand chose dans l'absolu.


$size = count($photos);

for ($i = 1; $i < $size; $i++) {
  unlink($photos[$i]->photo);
}

Modifié par jb_gfx (23 Dec 2013 - 17:54)
dans un code php je souhaite supprimer tous les éléments d'un tableau, sauf le premier.
==>
$arr = array(array_shift($arr));

PS : Ce que fait ton code et celui de jb_gfx c'est supprimer (unlink) le fichier $photos[$i]->photo (que j'imagine être le chemin vers un .jpg) pour tout les éléments du tableau sauf le premier. Par contre, ce code ne supprime pas les éléments du tableau $photos[$i] en tant que tel, pour cela il faudrait utiliser unset($photos[$i]).
Administrateur
Bonjour,

plutôt :
$dummy = array_shift( $photos)

non ? Le tableau en paramètre est modifié d'apès la doc (voir les commentaires si la perf est importante).
(et il n'y a peut-être pas besoin du = et de la partie gauche si c'est optionnel puisqu'on se fiche de la valeur dépilée)
Modérateur
Felipe a écrit :
Bonjour,

plutôt :
$dummy = array_shift( $photos)

non ? Le tableau en paramètre est modifié d'apès la doc (voir les commentaires si la perf est importante).
(et il n'y a peut-être pas besoin du = et de la partie gauche si c'est optionnel puisqu'on se fiche de la valeur dépilée)


+1 pour array_shift()

perso, j'écrirai un truc dans ce goût là pour le premier jet :

	$premierePhoto = array_shift($listPhotos);
	
	function rm($tab){
		return unlink($tab);
	}
	
	array_map('rm',$listPhotos);

Après faut regarder les perfs entre une boucle et un array_map pour ce type d'action.

Le plus court chemin reste :
 for($i = 1 ; $i < count($listPhotos); $i++) unlink(listPhotos[$i]->photo);

Modifié par niuxe (26 Dec 2013 - 00:05)