Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COMMENT SEPARER DES VALEURS INDEX DANS UNE VARIABLE CSV


Information sur la source

Catégorie :Astuces Classé sous : csv, valeurs, index Niveau : Débutant Date de création : 30/08/2005 Date de mise à jour : 04/09/2005 19:58:56 Vu : 2 667

Note :
Aucune note

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

Description

j'avais besoin d'une fonction permettant de separer les "valeurs" des "index" d'une variable passee en format CSV pour generer une query SQL.
en gros: on a 2 variables : $field="index,champs1,champs2" et $valeurs="1,t1,t2,2,t3,t4,3,t5,t6, ...".
Le but est donc de recuperer : $index=array ("1","2","3",..." et $val=array("t1","t2","t3","t4",...).


je ne sais pas si c'est clair ni si cela sera utile mais bon ... j'en avais besoin pour une requete SQL UPDATE...
 

Source

  • <?php
  • echo '<p style="font-size: 19px; font-weight: 700; text-decoration: underline;">Parsing of a comma delimited string to arrays</p>>';
  • echo 'On passe 2 variables, 1 avec le nom des champs, l\'autres avec les valeurs';
  • echo '<br />2 arrays sont retournes : <br /><li>$indexval contient les valeurs de l\'index (premiere colonne)</li>';
  • echo '<li>$val contient les valeurs du restant des colonnes</li>';
  • $tableField="index,field1,field2";
  • $tableValues="1i,field1-1,field1-2,2i,field2-1,field2-2,3i,field3-1,field3-2,4i,field4-1,field4-2";
  • $fields=explode(",",$tableField); //on cree un array a partir des 2 variables en les separant au niveau des virgules
  • $values=explode(",",$tableValues);
  • $nf=count($fields); // on compte le nombre de valeurs
  • $nv=count($values);
  • $indexval=array(); // on cree les 2 arrays pour le resultat final
  • $val=array();
  • for ($i=0;$i<$nv;$i+=$nf)
  • {
  • $indexval[]=$values[$i]; //on recupere la valeur de l'index et on stocke
  • for ($k=0;$k<$nf-1;$k++)
  • {
  • $l=$k+$i+1; // +1 pour eviter la valeur de l'index
  • $val[$k][]=$values[$l]; on recupere la valeur et on stocke
  • }
  • }
  • echo '<p style="font-size: 17px; font-weight: 700; ">les 2 variables passees :';
  • echo '<pre>';
  • echo '<li>$tableField</li>';
  • print_r($tableField);
  • echo '<br /><li>$tableValues</li>';
  • print_r($tableValues);
  • echo '<p style="font-size: 17px; font-weight: 700; ">le resultat';
  • echo '<br /><li>$indexval</li>';
  • print_r($indexval);
  • echo '<br /><li>$val</li>';
  • print_r($val);
  • echo '</pre>';
  • // exemple d'utilisation pour creer une requete SQL UPDATE
  • $k=0;
  • foreach ($indexval as $index)
  • {
  • $sql="UPDATE `table` SET ";
  • $n=count($val);$i=0;
  • while ($i<$n)
  • {
  • if ($i>0){$sql.=", ";}
  • $sql.="`{$fields[$i+1]}` = '{$val[$i][$k]}'";
  • $i++;
  • }
  • $sql.=" WHERE `{$fields[0]}` = '$index' LIMIT 1";
  • echo "SQL : $sql<br />";
  • $k++;
  • }
  • ?>
<?php

echo '<p style="font-size: 19px; font-weight: 700; text-decoration: underline;">Parsing of a comma delimited string to arrays</p>>';
echo 'On passe 2 variables, 1 avec le nom des champs, l\'autres avec les valeurs';
echo '<br />2 arrays sont retournes : <br /><li>$indexval contient les valeurs de l\'index (premiere colonne)</li>';
echo '<li>$val contient les valeurs du restant des colonnes</li>';
$tableField="index,field1,field2";
$tableValues="1i,field1-1,field1-2,2i,field2-1,field2-2,3i,field3-1,field3-2,4i,field4-1,field4-2";

$fields=explode(",",$tableField);  //on cree un array a partir des 2 variables en les separant au niveau des virgules
$values=explode(",",$tableValues);
$nf=count($fields);  // on compte le nombre de valeurs
$nv=count($values);

$indexval=array();  // on cree les 2 arrays pour le resultat final
$val=array();
for ($i=0;$i<$nv;$i+=$nf)
{
    $indexval[]=$values[$i]; //on recupere la valeur de l'index et on stocke
    for ($k=0;$k<$nf-1;$k++)
    {
        $l=$k+$i+1; //  +1 pour eviter la valeur de l'index
        $val[$k][]=$values[$l]; on recupere la valeur et on stocke
    }
    
}
echo '<p style="font-size: 17px; font-weight: 700; ">les 2 variables passees :';
echo '<pre>';
echo '<li>$tableField</li>';
print_r($tableField);
echo '<br /><li>$tableValues</li>';
print_r($tableValues);
echo '<p style="font-size: 17px; font-weight: 700; ">le resultat';
echo '<br /><li>$indexval</li>';
print_r($indexval);
echo '<br /><li>$val</li>';
print_r($val);
echo '</pre>';

// exemple d'utilisation pour creer une requete SQL UPDATE

$k=0;
foreach ($indexval as $index)
{
   $sql="UPDATE `table` SET ";
   $n=count($val);$i=0;
   while ($i<$n)
   {
     if ($i>0){$sql.=", ";}
     $sql.="`{$fields[$i+1]}` = '{$val[$i][$k]}'";
     $i++;
   }
   $sql.=" WHERE `{$fields[0]}` = '$index' LIMIT 1";
   echo "SQL : $sql<br />";
   $k++;
}
            

?>

Conclusion

Il y a surement moyen de faire mieux ... ou plus rapide mais bon ...
 

Historique

30 août 2005 14:46:06 :
Ajout d'un exemple d'utilisation ... je pense que ce sera plus clair comme cela ...
31 août 2005 14:00:36 :
Mise a jour selon recommendation de Anthomicro ...
04 septembre 2005 19:58:58 :
remplacement des splits par des explodes ...

Commentaires et avis

signaler à un administrateur
Commentaire de Anthomicro le 30/08/2005 15:15:47

Salut,

tu peux optimiser ton "for ($i=0;$i<count($val);$i++)"

$nb=count($val);
for($i=0;$i<$nb;$i++)
{

}

et tu peux mettre un while ça ira encore plus vite qu'un for ;-)

a +

signaler à un administrateur
Commentaire de galadriann le 31/08/2005 13:56:42

Bonne idee ... je change mes classes et je met a jour ...
Merci.

signaler à un administrateur
Commentaire de Optitech le 01/09/2005 16:29:06

Slt !

Beau travail !

Tu utilise split, Mais tu n'as pas d'expressions rationnelles donc pour faire gagné du temps à ton script utilise explode !

signaler à un administrateur
Commentaire de galadriann le 04/09/2005 19:57:19

Exact, bonne idee ...  mauvaise habitude de Perl ... j'en oublie les fonctions elementaires...

Je corrige de suite ...

Merci...

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

php et mysql : les index s'affichent pas !!! [ par stephane ] Voila, j'utilise cette procédure pour afficher les index d'une table (je suis deja connecté à la base de donnees) :$mode représente la table$rep=@mysq Liens en PHP [ par flolag ] Pour les pages de mon site j'utilise la fonction pseudo frames avecles liens du type index.php?rub=XXX mais ce ke je me suis rendu comptec'est ke tout Fichiers CSV+Tableaux et Balaises en PHP !!! [ par spectroman ] Avis à ceux qui maitrise PHP !!!- Demande I :Les fichiers :* Un fichier genre "données1.php"Qui s'occupe de générer l'affichage d'un page de type HTML Fichier INDEX auto-exécutable [ par BSide ] BSideBonjour,j'utilise EasyPHP1.6.Habituellement, quand je veux exécuter un script PHP, je vais sur le web local, je sélectionne le répertoire qui m'i recup valeurs de formulaire [ par ebourden ] Voila j'ai un petit souci avec mon code : $texte&lt;? \$mssql_host=\"HTTP_POST_VARS[mssql_host]\"; manipulation de variables [ par eax ] salutje cherche à extraire une partie d'une variable. je voudrais simplement extraire l'adresse url d'une variable en enlevant toutes les variables ph Tableau en php(débutant) [ par iomega ] Bonjour à tous je suis débutant en php et je voudrai manipuler un tableau voici mon problèmele tableau $tab100 contient des valeurs 0.125,0.25 etc...j valeur aléatoir [ par goulouk ] Bonjour,Je voudrais savoir comment avoir une valeur aléatoire comprise entre 2 valeurs, ms différente a chaque lancement du programme.( g utiliser la [SQL] Exporter vers un ficher csv [ par cedvoyage ] Ca doit surement être possible car y'a une fonction dans phpMyAdmin qui fait çà.Est-ce possible aussi de choisir les champs à exporter et de les mettr Garder les valeurs d'un formulaire [ par Clonk ] Bonjour, voilà mon problème:J'ai un formulaire où le visiteur saisis ses infos... apres je les vérifie et s'il y a un problème, je veux réafficher le


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,577 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.