begin process at 2010 03 16 22:06:12
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > INSERTION DE LIGNE EN PLEIN MILIEU D'UN TABLEAU PHP AVEC INDEX NUMÉRIQUE

INSERTION DE LIGNE EN PLEIN MILIEU D'UN TABLEAU PHP AVEC INDEX NUMÉRIQUE


 Information sur la source

Note :
Aucune note
Catégorie :Divers Niveau :Initié Date de création :12/12/2002 Date de mise à jour :12/12/2002 15:05:00 Vu :3 461

Auteur : booth

Ecrire un message privé
Site perso
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

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

  • 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;
  • }
  • ?>
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


 Sources de la même categorie

CALCUL D'UNE DISTANCE ORTHONORMIQUE par bossfoot
Source avec Zip ESPACE ADMIN SIMPLE par mousaid_88
Source avec Zip IMAGINE-CMS V2.20 par djack69
Source avec Zip AFFICHAGE ET GESTION DE DIAPORAMA EN PHP SANS BASE DE DONNÉE... par mldvb
Source avec Zip Source avec une capture PARSER ALLOCINE par cyrhades

Commentaires et avis

Commentaire de emilion le 22/12/2002 15:48:10

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
=&gt; gain de temps
on utilise que 2 case mémoire
=&gt; gain en mémoire

voila @+

Commentaire de booth le 26/12/2002 01:02:38

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

Commentaire de jeca le 06/01/2003 18:30:32

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.

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

  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 &lt;= $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 "&lt;b&gt;temps d'éxécution : &lt;/b&gt;" . $php . " &lt;b&gt;secondes&lt;/b&gt;&lt;br&gt;&lt;br&gt;";
?&gt;

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,296 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales