Comment separer des valeurs index dans une variable csv

Contenu du snippet

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 / Exemple :


<?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 ...

A voir également

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.

Du même auteur (galadriann)