Insertion de ligne en plein milieu d'un tableau php avec index numérique

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 970 fois - Téléchargée 30 fois

Contenu du snippet

Si vous avez un ordre à respcetr avec vos index de tableau et que vous voulez y insérer une valeur.

Vous avez en dessous l'exemple tout prêt avec la fonction en compacte et la meme fonction en expliquée

Source / Exemple :


debut tableau<br>
<?php
$test[0] = "a";
$test[1] = "b";
$test[2] = "d";
$test[3] = "e";
$test[4] = "f";
//AFFICHAGE TABLEAU
for ($i=0;$i<count($test);$i++){
	echo $test[$i]."<br>";
}
echo "<br>";
$test = tabAjoutLigne($test,2,"HELLO !!");
echo"<br>";
echo "tableau final<br>";
for ($i=0;$i<count($test);$i++){
	echo $test[$i]."<br>";
}
?> 
</body>
</html>

<?php

// FUNCTION EPUREE

function tabAjoutLigne($tableau,$ligne,$contenu){
	$limit = $ligne + 1;
	for($i=0;$i<$limit;$i++){$temp1[] = $tableau[$i];}
	for($i=$limit;$i<count($tableau);$i++){$temp2[] = $tableau[$i];}
	unset($tableau);
	for($i=0;$i<count($temp1);$i++){$tableau[] = $temp1[$i];}
	$tableau[]= $contenu;
	for($i=0;$i<count($temp2);$i++){$tableau[] = $temp2[$i];}
	return $tableau;
}

  
  // function qui permet d'ajouter une ligne vide dans un tableau
// parametres : $tableau -> tableau à passer
// 				$ligne   -> int qui permet de choisr après kel position on insert
//							!!!! L'index va de 0 -> +infini
// 				$contenu -> Valeur à mettre dans la nouvelle ligne du tableau
function tabAjoutLigne($tableau,$ligne,$contenu){
	// REMPLISSAGE PREMIER TABLEAU TEMP1
	
	$limit = $ligne + 1;
	for($i=0;$i<$limit;$i++){
		$temp1[] = $tableau[$i];	
	}
	
	// REMPLISSAGE SECOND TABLEAU TEMP2
	for($i=$limit;$i<count($tableau);$i++){
		$temp2[] = $tableau[$i];	
	}
	//DESTRUCTION DU TABLEAU D'ORIGINE
	unset($tableau);
	//AFFICHAGE TEMP1 retirez les commentaires si vous voulez voir
	/*
	echo"<br>";
	echo "tableau temp1<br>";
	for ($i=0;$i<count($temp1);$i++){
		echo $temp1[$i]."<br>";
	}
	// AFFICHAGE TEMP2 retirez les commentaires si vous voulez voir
	echo"<br>";
	echo "tableau temp2<br>";
	for ($i=0;$i<count($temp2);$i++){
		echo $temp2[$i]."<br>";
	}

  • /
// RECREATION DU TABLEAU D'ORIGINE AVEC LES VALEURS DE TEMP1 for($i=0;$i<count($temp1);$i++){ $tableau[] = $temp1[$i]; } //ajout d'une ligne vide $tableau[]= $contenu; // RECREATION DU TABLEAU D'ORIGINE AVEC LES VALEURS DE TEMP2 for($i=0;$i<count($temp2);$i++){ $tableau[] = $temp2[$i]; } return $tableau; } ?>

Conclusion :


Je vais voir quand même si je peux pas l'optimiser....
enfin je vais voir...
Je suis uvert à toute proposition concernant des modifs ou des ajouts...

A+

booth

A voir également

Ajouter un commentaire

Commentaires

emilion
Messages postés
2
Date d'inscription
dimanche 10 février 2002
Statut
Membre
Dernière intervention
22 décembre 2002
-
L'idée est bonne mais pourquoi recopier la premiere partie du tableau dans temp1 ??

moi j'aurais fait un truc du style

pour insérer un élément à la ligne 10
- je ne touche pas au 10 premiers elements du tableau
- au 10 je sauvegarde l'élément 10 dans $tampon et j'insere $ligne
- de l'element 11 à la fin je copie $tampon dans $ligne, je sauvegarde l'élément i dans $tampon et j'insere $ligne a l'indice i

avantages:
pour insérer un élément a la position 5000 d'un tableau de 10000 on économise le traitement des 5000 premiers éléments
=> gain de temps
on utilise que 2 case mémoire
=> gain en mémoire

voila @+
cs_booth
Messages postés
220
Date d'inscription
lundi 14 janvier 2002
Statut
Membre
Dernière intervention
13 juin 2005
-
Ouaip c'est vrai, c'est une fonction qui a été faite en hâte, je m'en vais la modifier de suite...

Merci pour ta remarque Emilion

A+

;-)

Booth
cs_jeca
Messages postés
341
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
14 juillet 2011
11 -
Je suis tombé par hazard sur ton code, et en fouillant dans php, j'ai trouvé les fonctions array_slice et array_merge. Ci-dessous le résultat.
Tout ce qui concerne temps et itérations n'est là que pour comparer le temps d'éxécution avec ton code.

<?php
function affiche($tableau)
{
for ($i = 0 ; $i < sizeof($tableau) ; $i++)
{
echo $tableau[$i] . "
";
}
echo "
";
}

function temps()
{
$heure = gettimeofday();
$tmp = ($heure['sec'].".".$heure['usec']);
return $tmp;
}

//-- debut programme --------------------
$test[0] = "a";
$test[1] = "b";
$test[2] = "c";
$test[3] = "d";
$test[4] = "e";
$test[5] = "f";

$nouveau = "HELLO";
$emplacement = 2;

$heureDeb = temps();
for ($i = 1 ; $i <= $iteration ; $i++)
{
$debut = array_slice($test, 0, $emplacement);
array_push($debut, $nouveau);

$fin = array_slice($test, $emplacement);

$resultat = array_merge($debut, $fin);
}
$heureFin = temps();
$php = $heureFin - $heureDeb;

affiche($test);
affiche($resultat);

echo "temps d'éxécution : " . $php . " secondes

";
?>

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.