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

emilion
Messages postés
2
Date d'inscription
dimanche 10 février 2002
Statut
Membre
Dernière intervention
22 décembre 2002
- 22 déc. 2002 à 15:48
cs_jeca
Messages postés
341
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
14 juillet 2011
- 6 janv. 2003 à 18:30
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/13062-insertion-de-ligne-en-plein-milieu-d-un-tableau-php-avec-index-numerique

cs_jeca
Messages postés
341
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
14 juillet 2011
14
6 janv. 2003 à 18:30
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

";
?>
cs_booth
Messages postés
220
Date d'inscription
lundi 14 janvier 2002
Statut
Membre
Dernière intervention
13 juin 2005

26 déc. 2002 à 01:02
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
emilion
Messages postés
2
Date d'inscription
dimanche 10 février 2002
Statut
Membre
Dernière intervention
22 décembre 2002

22 déc. 2002 à 15:48
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 @+