trier un fichier csv

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : trier un fichier csv

Re: trier un fichier csv

par gentil_ecureuil » 03 mars 2020, 22:07

Trouvé l'annerie.
Maintenant cela fonctionne.

Code : Tout sélectionner

<?php //================= // convert-tri-csv.php //================= // Tri du fichier csv function convert1($filename_csv, $delimiter1, $col, $ord) { // voir ce qui arrive de $col, $ord echo "On se trouve dans convert1 \n"; echo "fichier : ".$filename_csv."\n"; echo "delimiter : ".$delimiter1."\n"; echo "col : 0- ".$col[0]." 1- ".$col[1]." 2- ".$col[2]." 3- ".$col[3]. "\n"; echo "ord : 0- ".$ord[0]." 1- ".$ord[1]." 2- ".$ord[2]." 3- ".$ord[3]. "\n"; var_dump($col); var_dump($ord); /* $ord[1] = SORT_DESC; $ord[2] = SORT_ASC; $ord[3] = SORT_ASC; echo " valeur des ordres affectées avec formulaire par poste du tableau \n"; echo "ord 0 catégorie : ".$ord[0]." \n"; echo "ord 1 : ".$ord[1]." \n"; echo "ord 2 : ".$ord[2]." \n"; echo "ord 3 : ".$ord[3]." \n"; */ print_r($col); print_r($ord); // Je mets les enregistrements dans un tableau $lines_csv = file($filename_csv); $length = count($lines_csv); // print "length : ".$length."\n"; for($i = 0;$i < $length;$i++) { $keys_csv1 = $lines_csv[$i]; $keys_csv0 = explode($delimiter1,$keys_csv1); $keys_csv0[36] = rtrim($keys_csv0[36]); // on enlève les blancs en fin du dernier poste de chaque ligne // echo "colonne 36 : ".$keys_csv0[36]."\n"; // echo "colonne 0 : ".$keys_csv0[0]."\n"; // echo "nbre keys_csv '".count($keys_csv0)."'\n"; $keys_csv[] = $keys_csv0; } // On récupère l'ordre de tri pour chaque colonne if ($ord[0] == "4") { $ord0 = SORT_ASC; } else { $ord0 = SORT_DESC; } if ($ord[1] == "4") { $ord1 = SORT_ASC; } else { $ord1 = SORT_DESC; } if ($ord[2] == "4") { $ord2 = SORT_ASC; } else { $ord2 = SORT_DESC; } if ($ord[3] == "4") { $ord3 = SORT_ASC; } else { $ord3 = SORT_DESC; } // On trie le tableau avec la catégorie : // On met les enregistrements dont la catégorie n'est pas vide en premier puis ceux dont la catégorie est vide. // la ligne d'entête $header = array_shift($keys_csv); // les enregistrements dont la catégorie n'est pas vide $categorized = array_filter($keys_csv, function ($line) { return $line[36]; }); // les enregistrements dont la catégorie est vide $uncategorized = array_filter($keys_csv, function ($line) { return !$line[36]; }); // echo "nbre categorized '".count($categorized)."'\n"; // echo "nbre uncategorized '".count($uncategorized)."'\n"; // maintenant on trie chaque ligne par catégorie, nom complet, prénom, nom dont la catégorie n'est pas vide // selon les colonnes $col36values = array_column($categorized, $col[0]); $col0values = array_column($categorized, $col[1]); $col1values = array_column($categorized, $col[2]); $col2values = array_column($categorized, $col[3]); // array_multisort($col36values, SORT_ASC, $col0values, SORT_ASC, $col1values, SORT_ASC, $col2values, SORT_ASC, $categorized); // array_multisort($col36values, SORT_ASC, $col0values, SORT_DESC, $col1values, SORT_ASC, $col2values, SORT_ASC, $categorized); // array_multisort($col36values, $ord36values, $col0values, $ord0values, $col1values, $ord1values, $col2values, $ord2values, $categorized); array_multisort($col36values, $ord0, $col0values, $ord1, $col1values, $ord2, $col2values, $ord3, $categorized); // maintenant on trie chaque catégorie par catégorie, nom complet, prénom, nom dont la catégorie est vide // selon les colonnes $col36values = array_column($uncategorized, $col[0]); $col0values = array_column($uncategorized, $col[1]); $col1values = array_column($uncategorized, $col[2]); $col2values = array_column($uncategorized, $col[3]); // array_multisort($col36values, SORT_ASC, $col0values, SORT_DESC, $col1values, SORT_ASC, $col2values, SORT_ASC, $uncategorized); array_multisort($col36values, $ord0, $col0values, $ord1, $col1values, $ord2, $col2values, $ord3, $uncategorized); // Maintenant on imprime chaque ligne // l'entête $ligne = implode($delimiter1, $header); print "".$ligne."\n"; // chaque ligne avec catégorie non vide foreach($categorized as $line) { $ligne1 = implode($delimiter1, $line); print "".$ligne1."\n"; } // push uncategorized lines foreach($uncategorized as $line) { $ligne1 = implode($delimiter1, $line); print "".$ligne1."\n"; } } ?>
Si vous voyez quelque chose dans le code...

Anne

Re: trier un fichier csv

par gentil_ecureuil » 03 mars 2020, 18:48

C'est ok pour les tableaux associatifs
Merci

Le code de la conversion est un peu plus haut.

Mon dernier souci c'est :

Code : Tout sélectionner

// array_multisort($col36values, SORT_ASC, $col0values, SORT_DESC, $col1values, SORT_ASC, $col2values, SORT_ASC, $categorized); array_multisort($col36values, $ord36values, $col0values, $ord0values, $col1values, $ord1values, $col2values, $ord2values, $categorized);
Si je mets la première ligne (celle commenté) cela trie bien les enregistrements du fichier
Le résultat :

Code : Tout sélectionner

On se trouve dans convert1 fichier : upload/file.csv delimiter : ; col : 0- 36 1- 2 2- 0 3- 1 ord : 0- 4 1- 3 2- 4 3- 4 First Name;Last Name;Display Name;Nickname;E-mail Address;E-mail 2 Address;E-mail 3 Address;Home Phone;Business Phone;Mobile Phone;Home Fax;Business Fax;Pager;Home Street;Home Address 2;Home City;Home State;Home Postal Code;Home Country;Business Address;Business Address 2;Business City;Business State;Business Postal Code;Business Country;Country Code;Related name;Job Title;Department;Organization;Notes;Birthday;Anniversary;Gender;Web Page;Web Page 2;Categories Aprenom7;Anom7;Aprenom7 Anom7;;;;;+33 1 23 45 67 89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;test ;;Aprenom6 Anom6;;;;;+33 1 23 45 67 89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;test Aprenom5;Anom5;Aprenom5 Anom5;;;;;;+33 9 87 65 43 21;;;;;;;;;;;;;;;;;;;;;;;;;;;;test Aprenom4;Anom4;Aprenom4 Anom4;;;;;+33 1 23 45 67 89;+33 9 12 34 56 78;+33 6 87 65 43 21;;;;;;;;;;;;;;;;;;;;;;;;;;;test Aprenom3;Anom3;Aprenom3 Anom3;;;;;;;+33 6 12 34 56 78;;;;;;;;;;;;;;;;;;;;;;;;;;;test Aprenom2;Anom2;Aprenom2 Anom2;;[email protected];[email protected];;+33 1 23 45 67 89;+33 9 12 34 76 78;+33 6 56 78 12 34;;;;rue D;rue D étendue;ville D;paca D;12345;france;rue T;rue T étendue;ville T;paca T;23456;france;;;;;;note lig 1 note lig 2 note lig 3;2020-01-05 00:00:00;;;www.xxx.com;;test Aprenom1 Anom1;;Aprenom1 Anom1;;[email protected];[email protected];;+33 1 23 45 67 89;+33 2 87 65 43 21;+33 6 12 34 56 78;+33 9 12 34 56 78;+33 9 87 65 43 21;;rue1;rue2;meylan;rhone alpes;38240;france;rue1T;rue2T;Grenoble;isere;38000;france;;;;;;notes;1604-12-08 00:00:00;;;;;test ;Aprenom Anom;Aprenom Anom;;[email protected];[email protected];[email protected];+33 9 12 34 56 78;+33 9 87 65 43 21;+33 6 12 56 34 78;+33 8 12 34 56 78;+33 8 87 65 43 21;;rueD;;VILLED;;01234;;rueT;;VilleT;;34567;;;;;;;notes en tout genre AAAAAA aaaaaa;2019-12-18 00:00:00;;;;;test
Si je mets la deuxième ligne
Le résultat :

Code : Tout sélectionner

fichier : upload/file.csv delimiter : ; col : 0- 36 1- 2 2- 0 3- 1 ord : 0- 4 1- 3 2- 4 3- 4 First Name;Last Name;Display Name;Nickname;E-mail Address;E-mail 2 Address;E-mail 3 Address;Home Phone;Business Phone;Mobile Phone;Home Fax;Business Fax;Pager;Home Street;Home Address 2;Home City;Home State;Home Postal Code;Home Country;Business Address;Business Address 2;Business City;Business State;Business Postal Code;Business Country;Country Code;Related name;Job Title;Department;Organization;Notes;Birthday;Anniversary;Gender;Web Page;Web Page 2;Categories Aprenom3;Anom3;Aprenom3 Anom3;;;;;;;+33 6 12 34 56 78;;;;;;;;;;;;;;;;;;;;;;;;;;;test Aprenom4;Anom4;Aprenom4 Anom4;;;;;+33 1 23 45 67 89;+33 9 12 34 56 78;+33 6 87 65 43 21;;;;;;;;;;;;;;;;;;;;;;;;;;;test Aprenom5;Anom5;Aprenom5 Anom5;;;;;;+33 9 87 65 43 21;;;;;;;;;;;;;;;;;;;;;;;;;;;;test ;;Aprenom6 Anom6;;;;;+33 1 23 45 67 89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;test Aprenom7;Anom7;Aprenom7 Anom7;;;;;+33 1 23 45 67 89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;test ;Aprenom Anom;Aprenom Anom;;[email protected];[email protected];[email protected];+33 9 12 34 56 78;+33 9 87 65 43 21;+33 6 12 56 34 78;+33 8 12 34 56 78;+33 8 87 65 43 21;;rueD;;VILLED;;01234;;rueT;;VilleT;;34567;;;;;;;notes en tout genre AAAAAA aaaaaa;2019-12-18 00:00:00;;;;;test Aprenom2;Anom2;Aprenom2 Anom2;;[email protected];[email protected];;+33 1 23 45 67 89;+33 9 12 34 76 78;+33 6 56 78 12 34;;;;rue D;rue D étendue;ville D;paca D;12345;france;rue T;rue T étendue;ville T;paca T;23456;france;;;;;;note lig 1 note lig 2 note lig 3;2020-01-05 00:00:00;;;www.xxx.com;;test Aprenom1 Anom1;;Aprenom1 Anom1;;[email protected];[email protected];;+33 1 23 45 67 89;+33 2 87 65 43 21;+33 6 12 34 56 78;+33 9 12 34 56 78;+33 9 87 65 43 21;;rue1;rue2;meylan;rhone alpes;38240;france;rue1T;rue2T;Grenoble;isere;38000;france;;;;;;notes;1604-12-08 00:00:00;;;;;test
Le tri ne fonctionne pas quand je mets $ord36values,... au lieu de SORT_ASC et SORT_DESC

Anne

Re: trier un fichier csv

par Saian » 03 mars 2020, 17:18

Essaie de bien comprendre la différence entre tableau de base et tableau associatif.
// quand tu déclares 
$array = [ 3, 4 ];
// c'est équivalent à
$array = [
  0 => 3,
  1 => 4
];
// ici évidemment pour tester si 3 ou 4 est bien présent dans le tableau c'est un in_array
var_dump(in_array(3, $array));// true
var_dump(in_array(1, $array));// false

// si ton tableau c'est
$array = [
  3 => 'Descendant',
  4 => 'Ascendant'
];
// 3 et 4 ne sont pas présents dans la tableau qui contient Descendant et Ascendant
// mais 3 et 4 sont les clés du tableau, il faut donc utiliser array_key_exists
var_dump(array_key_exists(3, $array));// true
var_dump(array_key_exists(1, $array));// false
var_dump(in_array(3, $array));// false
var_dump(in_array(1, $array));// false

Re: trier un fichier csv

par gentil_ecureuil » 03 mars 2020, 17:12

Je teste
...
C'est ok.
Je ne sais pas ce que j'avais fait pour avoir 'pas bon' avant.

Code : Tout sélectionner

echo "poste prénom ord : ".$_POST['_prenom_ord']." <br>"; if (array_key_exists($_POST['_prenom_ord'], $ordre1)) { $ord[$tri_prenom] = $_POST['_prenom_ord']; echo "<br> post prenom_ord, c'est ok <br>"; } else { echo "<br> post prenom_ord, pas bon <br>"; }

Code : Tout sélectionner

poste prénom ord : 4 post prenom_ord, c'est ok

Re: trier un fichier csv

par Saian » 03 mars 2020, 17:06

Quand je n'avais qu'un tableau, le test pour le retour du formulaire n'était pas bon.
Tu n'as pas besoin d'avoir 2 tableaux, si tu utilises les bonnes variables le test est bon.
$ordre = [
  SORT_ASC => 'Ascendant',
  SORT_DESC => 'Descendant'
];

$_POST['ordre'] = 1;

if (!array_key_exists($_POST['ordre'], $ordre))
  echo 'valeur non autorisée';

$_POST['ordre'] = 3;

if (array_key_exists($_POST['ordre'], $ordre))
  echo 'valeur autorisée';
Et ça fonctionne aussi en faisant $_POST['ordre'] = '1'; et $_POST['ordre'] = '3';

Re: trier un fichier csv

par gentil_ecureuil » 03 mars 2020, 17:01

Merci d'avoir épluché mon code


J'ai créé 2 tableaux

Code : Tout sélectionner

// tableau pour formulaire $ordre1 = [ $sort2_type => 'Ascendant', $sort1_type => 'Descendant' ]; // tableau pour test retour formulaire $ordre = [ SORT_ASC , SORT_DESC ];
formulaire :

Code : Tout sélectionner

ordre <select name = "_prenom_ord" >'; foreach($ordre1 as $value => $label ){ echo '<option value = "'.$value.'" > '.$label.' </option>'; } echo '</select> <br><br>
test retour du formulaire

Code : Tout sélectionner

if (in_array($_POST['_prenom_ord'], $ordre)) { $ord[$tri_prenom] = $_POST['_prenom_ord']; } else { echo "<br> post prenom_ord, pas bon <br>"; }
Quand je n'avais qu'un tableau, le test pour le retour du formulaire n'était pas bon.

Appel de la fonction pour le tri

Code : Tout sélectionner

... $_SESSION['fichier_name'] = $_FILES["file"]["name"]; $_SESSION['fic_name'] = basename($_SESSION['fichier_name'],".csv"); $destFilepath = 'upload/file.csv'; move_uploaded_file($_FILES['file']['tmp_name'], $destFilepath); $_SESSION['filepath'] = $destFilepath; ... else { $filename_tri_csv = $_SESSION['fic_name']."-tri.csv"; header('Content-Type: text/csv'); header(sprintf('Content-Disposition: attachment; filename="%s"', $filename_tri_csv)); convert1($_SESSION['filepath'],$delimiter,$col,$ord); unlink($_SESSION['filepath']);// supprime le fichier exit; }
Je passe en paramètre : le fichier qui sera trié, le délimiteur du fichier csv, le tableau des colonnes et le tableau des des ordres.

Pour le tri

Code : Tout sélectionner

// Tri du fichier csv function convert1($filename_csv, $delimiter1, $col, $ord) { // voir ce qui arrive de $col, $ord echo "On se trouve dans convert1 \n"; echo "fichier : ".$filename_csv."\n"; echo "delimiter : ".$delimiter1."\n"; echo "col : 0- ".$col[0]." 1- ".$col[1]." 2- ".$col[2]." 3- ".$col[3]. "\n"; echo "ord : 0- ".$ord[0]." 1- ".$ord[1]." 2- ".$ord[2]." 3- ".$ord[3]. "\n"; // Je mets les enregistrements dans un tableau $lines_csv = file($filename_csv); $length = count($lines_csv); // print "length : ".$length."\n"; for($i = 0;$i < $length;$i++) { $keys_csv1 = $lines_csv[$i]; $keys_csv0 = explode($delimiter1,$keys_csv1); $keys_csv0[36] = rtrim($keys_csv0[36]); // on enlève les blancs en fin du dernier poste de chaque ligne $keys_csv[] = $keys_csv0; } // On trie le tableau avec la catégorie : // On met les enregistrements avec la catégorie n'est pas vid puis ceux dont la catégorie est vide. // la ligne d'entête $header = array_shift($keys_csv); // les enregistrements dont la catégorie n'est pas vide $categorized = array_filter($keys_csv, function ($line) { return $line[36]; }); // les enregistrements dont la catégorie est vide pour qu'ils soient en dernier $uncategorized = array_filter($keys_csv, function ($line) { return !$line[36]; }); // maintenant on trie chaque ligne par catégorie, nom complet, prénom, nom dont la catégorie n'est pas vide // selon les colonnes $col36values = array_column($categorized, $col[0]); $col0values = array_column($categorized, $col[1]); $col1values = array_column($categorized, $col[2]); $col2values = array_column($categorized, $col[3]); // selon si descendant ou ascendant $ord36values = array_column($categorized, $ord[0]); $ord0values = array_column($categorized, $ord[1]); $ord1values = array_column($categorized, $ord[2]); $ord2values = array_column($categorized, $ord[3]); // array_multisort($col36values, SORT_ASC, $col0values, SORT_DESC, $col1values, SORT_ASC, $col2values, SORT_ASC, $categorized); array_multisort($col36values, $ord36values, $col0values, $ord0values, $col1values, $ord1values, $col2values, $ord2values, $categorized); // maintenant on trie chaque catégorie par catégorie, nom complet, prénom, nom dont la catégorie est vide // selon les colonnes $col36values = array_column($uncategorized, $col[0]); $col0values = array_column($uncategorized, $col[1]); $col1values = array_column($uncategorized, $col[2]); $col2values = array_column($uncategorized, $col[3]); // selon si descendant ou ascendant $ord36values = array_column($uncategorized, $ord[0]); $ord0values = array_column($uncategorized, $ord[1]); $ord1values = array_column($uncategorized, $ord[2]); $ord2values = array_column($uncategorized, $ord[3]); array_multisort($col36values, SORT_ASC, $col0values, SORT_ASC, $col1values, SORT_ASC, $col2values, SORT_ASC, $uncategorized); // Maintenant on imprime chaque ligne // l'entête $ligne = implode($delimiter1, $header); print "".$ligne."\n"; // chaque ligne avec catégorie non vide foreach($categorized as $line) { $ligne1 = implode($delimiter1, $line); print "".$ligne1."\n"; } // push uncategorized lines foreach($uncategorized as $line) { $ligne1 = implode($delimiter1, $line); print "".$ligne1."\n"; } }

Re: trier un fichier csv

par Saian » 03 mars 2020, 11:37

Oui le formulaire envoie toutes les données sous forme de chaîne. C'est pas très grave, php sait convertir le string en int. Mais tu peux toujours forcer la conversion avec un intval($_POST['ton_input']).

if (array_key_exists($_POST['order'], $orderOptions))
pourquoi mettre $orderOptions)

Parce que dans mon exemple j'avais mis select name="order" et j'avais déclaré :
$orderOptions = [
  SORT_ASC => 'Ascendant',
  SORT_DESC => 'Descendant'
];

Ce qui donne un tableau :
Array ( [4] => 'Ascendant', [3] => 'Descendant' )

Et donc si tu fais un if (array_key_exists($_POST['order'], $orderOptions)) tu peux vérifier que la valeur de $_POST['order'] est bien 3 ou 4 puisque la condition sera false si la valeur n'est pas 3 ou 4 (clé inexistante, les seules clés étant 3 et 4).

PS : Pour un petit programme que tu seras la seule à utiliser, tu t'en fous un peu des tests. Les tests c'est surtout si d'autres personnes sont amenés à utiliser ton programme et d'autant plus si un utilisateur éventuellement mal intentionné essaie de s'en servir. En l'occurrence j'ai pas épluché tout ton code mais je doute que cela puisse être exploité de manière particulièrement dangereuse.

Re: trier un fichier csv

par gentil_ecureuil » 02 mars 2020, 15:14

---
Si tu veux valider la valeur de $_POST['order'] (être sur que c'est bien une des valeurs possibles), tu peux faire un
if (array_key_exists($_POST['order'], $orderOptions))
---
Le formulaire

Code : Tout sélectionner

echo '<form method="post" enctype="multipart/form-data"> <BR> <label for="file">Veuillez sélectionner votre fichier.csv puis cliquez sur "trier le fichier csv" :</label> <BR><BR> <input type="file" name="file" id="file" style="width: 100%;"> <BR><BR> field selector : <select name="_delimiter" value="'.$delimiter.'" > <option value="" '.$select_del0.' ></option> <option value="'.$comma.'" '.$select_del1.'>Comma</option> <option value="'.$semicolon.'" '.$select_del2.' >Semicolon</option> <option value="'.$tab.'" '.$select_del3.' >Tab</option> </select><BR><BR> Tri Prénom : <select name = "_prenom_tri" value="'.$prenom_tri.'" >'; foreach($nombre as $select_nbre){ echo '<option value = "'.$select_nbre.'" > '.$select_nbre.' </option>'; } echo '</select> ordre <select name = "_prenom_ord" value="'.$prenom_ord.'" >'; foreach($ordre as $value => $label ){ echo '<option value = "'.$value.'" > '.$label.' </option>'; } echo '</select> <br><br> Tri Nom : <select name = "_nom_tri" value="'.$nom_tri.'" >'; foreach($nombre as $select_nbre){ echo '<option value = "'.$select_nbre.'" > '.$select_nbre.' </option>'; } echo '</select> ordre <select name = "_nom_ord" value="'.$nom_ord.'" >'; foreach($ordre as $value => $label ){ echo '<option value = "'.$value.'" > '.$label.' </option>'; echo '</select> <br><br> Tri Nom Complet : <select name = "_nom_complet_tri" value="'.$nom_complet_tri.'" >'; foreach($nombre as $select_nbre){ echo '<option value = "'.$select_nbre.'" > '.$select_nbre.' </option>'; } echo '</select> ordre <select name = "_nom_complet_ord" value="'.$nom_complet_ord.'" >'; foreach($ordre as $value => $label ){ echo '<option value = "'.$value.'" > '.$label.' </option>'; } echo '</select> <br><br> <input type="submit" name="convert" value="trier le fichier csv" style="width: 100%;"> </form>';

J'ai un tableau que je remplis au premier passage dans le programme

Code : Tout sélectionner

$nombre = array (1, 2, 3); $ordre = [ SORT_ASC => 'Ascendant', SORT_DESC => 'Descendant' ]; $col[0] = 36; $ord[0] = SORT_ASC; if ( !isset($debut) ) { $col[1] = 0; $ord[1] = SORT_ASC; $col[2] = 1; $ord[2] = SORT_ASC; $col[3] = 2; $ord[3] = SORT_ASC; $_SESSION['debut'] = "debut"; // test pour voir ce qu'il y a dans les tableaux $col et $ord echo ' var_dump $col : <br>'; var_dump($col); echo '<br> print_r $col : <br>'; print_r($col); echo '<br><br>'; echo ' var_dump $ord : <br>'; var_dump($ord); echo '<br> print_r $ord : <br>'; print_r($ord); echo '<br><br>'; }
=> résultat

Code : Tout sélectionner

var_dump $col : array(4) { [0]=> int(36) [1]=> int(0) [2]=> int(1) [3]=> int(2) } print_r $col : Array ( [0] => 36 [1] => 0 [2] => 1 [3] => 2 ) var_dump $ord : array(4) { [0]=> int(4) [1]=> int(4) [2]=> int(4) [3]=> int(4) } print_r $ord : Array ( [0] => 4 [1] => 4 [2] => 4 [3] => 4 )
Maintenant je reviens du formulaire que j'ai rempli

Code : Tout sélectionner

if (array_key_exists($_POST['_prenom_tri'], $nombre)) { $tri_prenom = $_POST['_prenom_tri']; } else { echo "<br> post prénom tri, pas bon <br>"; } if (array_key_exists($_POST['_nom_complet_tri'], $nombre)) { $tri_nom_complet = $_POST['_nom_complet_tri']; } else { echo "<br> post nom complet tri, pas bon <br>"; } if (array_key_exists($_POST['_nom_tri'], $nombre)) { $tri_nom = $_POST['_nom_tri']; } else { echo "<br> post nom tri, pas bon <br>"; } echo "<br> colonne affectée avec formulaire <br>"; echo "tri prénom : ".$tri_prenom." \n"; echo "tri nom : ".$tri_nom." \n"; echo "tri nom complet : ".$tri_nom_complet." \n"; echo '<br>'; $col[$tri_prenom] = 0 ; $col[$tri_nom] = 1 ; $col[$tri_nom_complet] = 2 ; echo "<br> valeur des colonnes affectées avec formulaire <br>"; echo "col prénom : ".$col[$tri_prenom]." \n"; echo "col nom : ".$col[$tri_nom]." \n"; echo "col nom complet : ".$col[$tri_nom_complet]." \n"; echo '<br>'; echo "<br> valeur des colonnes affectées avec formulaire par poste du tableau <br>"; echo "col 0 catégorie : ".$col[0]." \n"; echo "col 1 : ".$col[1]." \n"; echo "col 2 : ".$col[2]." \n"; echo "col 3 : ".$col[3]." \n"; echo '<br><br>'; echo ' var_dump $col : <br>'; var_dump($col); echo '<br> print_r $col : <br>'; print_r($col); echo '<br><br>';
résutat :

Code : Tout sélectionner

post nom tri, pas bon colonne affectée avec formulaire tri prénom : 2 tri nom : tri nom complet : 1 valeur des colonnes affectées avec formulaire col prénom : 0 col nom : 1 col nom complet : 2 valeur des colonnes affectées avec formulaire par poste du tableau col 0 catégorie : 36 col 1 : 2 col 2 : 0 col 3 : var_dump $col : array(4) { [0]=> int(36) [2]=> int(0) [""]=> int(1) [1]=> int(2) } print_r $col : Array ( [0] => 36 [2] => 0 [] => 1 [1] => 2 ) valeur des ordres affectées avec formulaire par poste du tableau ord 0 catégorie : 4 ord 1 : 3 ord 2 : 4 ord 3 : var_dump $ord : array(4) { [0]=> int(4) [2]=> string(1) "4" [""]=> string(1) "4" [1]=> string(1) "3" } print_r $ord : Array ( [0] => 4 [2] => 4 [] => 4 [1] => 3 )
3 = SORT_DESC
4 = SORT_ASC

Maintenant j'ai mis descendant pour nom complet

Code : Tout sélectionner

var_dump $col : array(4) { [0]=> int(36) [1]=> int(0) [2]=> int(1) [3]=> int(2) } print_r $col : Array ( [0] => 36 [1] => 0 [2] => 1 [3] => 2 ) var_dump $ord : array(4) { [0]=> int(4) [1]=> int(4) [2]=> int(4) [3]=> int(4) } print_r $ord : Array ( [0] => 4 [1] => 4 [2] => 4 [3] => 4 ) colonne affectée avec formulaire tri prénom : 2 tri nom : 3 tri nom complet : 1 valeur des colonnes affectées avec formulaire col prénom : 0 col nom : 1 col nom complet : 2 valeur des colonnes affectées avec formulaire par poste du tableau col 0 catégorie : 36 col 1 : 2 col 2 : 0 col 3 : 1 var_dump $col : array(4) { [0]=> int(36) [1]=> int(2) [2]=> int(0) [3]=> int(1) } print_r $col : Array ( [0] => 36 [1] => 2 [2] => 0 [3] => 1 ) valeur des ordres affectées avec formulaire par poste du tableau ord 0 catégorie : 4 ord 1 : 3 ord 2 : 4 ord 3 : 4 var_dump $ord : array(4) { [0]=> int(4) [1]=> string(1) "3" [2]=> string(1) "4" [3]=> string(1) "4" } print_r $ord : Array ( [0] => 4 [1] => 3 [2] => 4 [3] => 4 )


Ce qui est bizarre c'est l'affectation dans le tableau $ord avec les string

autre question

if (array_key_exists($_POST['order'], $orderOptions))
pourquoi mettre $orderOptions)
=>
C'est pour comparer $_POST['order'] avec ce qu'il y a dans $orderOptions

J'ai une erreur avec 'post nom tri, pas bon'

Je n'arrive pas à voir l'erreur.
Je vais mettre le formulaire

J'ai fait d'autres tests...
C'est quand je mets 3 comme chiffre

J'ai comme solution 1, 2 ou 3 dans le select du formulaire.
Pour l'instant je ne comprends pas pourquoi 3 ne passe pas

trouvé l'erreur
array_key_exists => in_array

avec in_array cela va mieux :D

Un tableau qui n'a que 3 postes ne peut pas avoir 3 comme clé

Reste encore le tableau avec
var_dump $ord :
array(4) { [0]=> int(4) [1]=> string(1) "3" [2]=> string(1) "4" [3]=> string(1) "4" }

3 = SORT_DESC
4 = SORT_ASC

Au premier passage, je remplis le tableau avec
$col[0] = 36;
$ord[0] = SORT_ASC;

if ( !isset($debut) ) {
$col[1] = 0;
$ord[1] = SORT_ASC;
$col[2] = 1;
$ord[2] = SORT_ASC;
$col[3] = 2;
$ord[3] = SORT_ASC;

=> Cela donne
var_dump $ord :
array(4) { [0]=> int(4) [1]=> int(4) [2]=> int(4) [3]=> int(4) }
print_r $ord :
Array ( [0] => 4 [1] => 4 [2] => 4 [3] => 4 )

Quand je reviens du formulaire
var_dump $ord :
array(4) { [0]=> int(4) [1]=> string(1) "3" [2]=> string(1) "4" [3]=> string(1) "4" }
print_r $ord :
Array ( [0] => 4 [1] => 3 [2] => 4 [3] => 4 )

Re: trier un fichier csv

par Saian » 01 mars 2020, 18:08

Tu devrais éviter les $ dans tes noms d'input (select, etc) ça porte à confusion. <select name="prenom_tri"> c'est très bien.
Y a pas d'attribut value sur un select. Il va sur les options du select.
Tu as appelé tes select $_prenom_ord, $_nom_ord, etc, les données sont donc dans $_POST['$_prenom_ord'], $_POST['$_nom_ord'], etc
En se référent à tes variables c'est array_key_exists($_POST['$_prenom_ord'], $ordre), array_key_exists($_POST['$_nom_ord'], $ordre), etc

Re: trier un fichier csv

par gentil_ecureuil » 01 mars 2020, 17:21

Code : Tout sélectionner

<?php. ... $nombre = array (1, 2, 3); $ordre = [ SORT_ASC => 'Ascendant', SORT_DESC => 'Descendant' ]; $col[0] = 36; $ord[0] = SORT_ASC; ... if ( isset($_REQUEST["convert"]) ) { ... // tri du fichier csv /* le tableau $col correspond aux colonnes du tableau csv 0 = prénom 1 = nom 2 = nom complet 36 = catégorie La catégorie sera toujours trié en premier, l'ordre 'prénom, nom, nom complet' est choisi dans le formulaire la colonne '0' correspond à la catégorie Le tableau $ord : tri ascendant ou descendant pour prénom, nom, nom complet. */ $col[$_POST['$_prenom_tri']] = 0 ; $col[$_POST['$_nom_tri']] = 1 ; $col[$_POST['$_nom_complet_tri']] = 2 ; // C'est ici que je patauge // ------------------------------ // comment mettre if (array_key_exists($_POST['order'], $orderOptions)) // chez poi dans le formulaire j'ai : foreach($ordre as $value => $label ) $sort[$_POST['$_prenom_tri']] = $_POST['$_prenom_ord']; $sort[$_POST['$_nom_tri']] = $_POST['$_nom_ord']; $sort[$_POST['$_nom_complet_tri']] = $_POST['$_nom_complet_ord']; ... } if ( !isset($_REQUEST["convert"]) ) { ... Tri Prénom : <select name = "$_prenom_tri" value="'.$prenom_tri.'" >'; foreach($nombre as $select_nbre){ echo '<option value = "'.$select_nbre.'" > '.$select_nbre.' </option>'; } echo '</select> ordre <select name = "$_prenom_ord" value="'.$prenom_ord.'" >'; foreach($ordre as $value => $label ){ echo '<option value = "'.$value.'" > '.$label.' </option>'; } echo '</select> <br><br> Tri Nom : <select name = "$_nom_tri" value="'.$nom_tri.'" >'; foreach($nombre as $select_nbre){ echo '<option value = "'.$select_nbre.'" > '.$select_nbre.' </option>'; } echo '</select> ordre <select name = "$_nom_ord" value="'.$nom_ord.'" >'; foreach($ordre as $value => $label ){ echo '<option value = "'.$value.'" > '.$label.' </option>'; } echo '</select> <br><br> Tri Nom Complet : <select name = "$_nom_complet_tri" value="'.$nom_complet_tri.'" >'; foreach($nombre as $select_nbre){ echo '<option value = "'.$select_nbre.'" > '.$select_nbre.' </option>'; } echo '</select> ordre <select name = "$_nom_complet_ord" value="'.$nom_complet_ord.'" >'; foreach($ordre as $value => $label ){ echo '<option value = "'.$value.'" > '.$label.' </option>'; } echo '</select> <br><br> <input type="submit" name="convert" value="trier le fichier csv" style="width: 100%;"> ... }
Dans convert-tri-csv.php

Code : Tout sélectionner

... function convert1($filename_csv, $delimiter1, $col, $ord) { // echo "delimiter : ".$delimiter1."\n"; echo "col : 0- ".$col[0]." 1- ".$col[1]." 2- ".$col[2]." 3- ".$col[3]. "\n"; echo "ord : 0- ".$ord[0]." 1- ".$ord[1]." 2- ".$ord[2]." 3- ".$ord[3]. "\n"; ... // maintenant on trie chaque ligne par catégorie, nom complet, prénom, nom dont la catégorie n'est pas vide $col36values = array_column($categorized, $col[0]); $col0values = array_column($categorized, $col[1]); $col1values = array_column($categorized, $col[2]); $col2values = array_column($categorized, $col[3]); $ord36values = array_column($categorized, $ordl[0]); $ord0values = array_column($categorized, $ord[1]); $ord1values = array_column($categorized, $ord[2]); $ord2values = array_column($categorized, $ord[3]); array_multisort($col36values, $ord36values, $col0values, $ord0values, $col1values, $ord1values, $col2values, $ord2values, $categorized); ...
Quand je vais pour convertir j'ai mis ces 2 lignes pour voir ce qui se passe dans le fichier de sortie

echo "col : 0- ".$col[0]." 1- ".$col[1]." 2- ".$col[2]." 3- ".$col[3]. "\n";
echo "ord : 0- ".$ord[0]." 1- ".$ord[1]." 2- ".$ord[2]." 3- ".$ord[3]. "\n";

ce qui donne

col : 0- 36 1- 2 2- 0 3- 1
ord : 0- 4 1- 2- 3-

Je ne vois rien dans le tableau 'ord' pour les poste 1, 2 et 3.

Comment faire pour visualiser ces postes?

pataugeoire garantie 100%

Re: trier un fichier csv

par Saian » 01 mars 2020, 02:41

Normal SORT_ASC et SORT_DESC sont des constantes php. La valeur réel c'est celle que tu obtiens en faisant un echo SORT_ASC et c'est effectivement une valeur numérique. Et tu peux donner directement la valeur numérique à la fonction, tu n'es pas obligée d'utiliser la constante.

Donc le genre de chose que tu peux faire c'est ça :
// utiliser un tableau associatif
$orderOptions = [
  SORT_ASC => 'SORT_ASC',
  SORT_DESC => 'SORT_DESC'
];

Pour les options du select dans le formulaire
<select name="order">
<?php foreach ($orderOptions as $value => $label): ?>
  <option value="<?php echo $value; ?>"><?php echo $label; ?></option>
<?php endforeach; ?>
</select>

Ensuite tu peux utiliser directement $_POST['order'] dans le tableau en troisième paramètre de listSort.

Si tu veux valider la valeur de $_POST['order'] (être sur que c'est bien une des valeurs possibles), tu peux faire un
if (array_key_exists($_POST['order'], $orderOptions))

PS : et tu pourrais tout aussi bien déclarer $orderOptions avec des termes compréhensibles pour l'utilisateur lambda :
$orderOptions = [
  SORT_ASC => 'Ascendant',
  SORT_DESC => 'Déscendant'
];

Re: trier un fichier csv

par gentil_ecureuil » 29 févr. 2020, 21:47

Sur mon ordi (debian stretch) je suis avec php 7.0

Sur mon serveur, j'ai installé PHP Software Collections
Donc, je peux être jusqu'à php 7.3 maintenant :? :lol:

----
$categorized = listSort(
$categorized,
[ 36, 0, 1, 2 ],
[ SORT_ASC, SORT_ASC, SORT_ASC, SORT_ASC ]);
----

Ce qui me plaisait avec cela c'est la notion de 2 tableaux

Avec mon serveur, j'ai un souci

Code : Tout sélectionner

$nombre = array (1, 2, 3); //$ordre = array (SORT_ASC, SORT_DESC); // 1 $ordre = array ("SORT_ASC", "SORT_DESC"); // 2 //$ordre = array ('SORT_ASC', 'SORT_DESC'); // 3
Dans le formulaire j'ai

Code : Tout sélectionner

Tri Prénom : <select name = "$_prenom_tri" value="'.$prenom_tri.'" >'; foreach($nombre as $select_nbre){ echo '<option value = "'.$select_nbre.'" > '.$select_nbre.' </option>'; } echo '</select> ordre <select name = "$_prenom_ord" value="'.$prenom_ord.'" >'; foreach($ordre as $select_ordre){ echo '<option value = "'.$select_ordre.'" > '.$select_ordre.' </option>'; } echo '</select> <br><br>
Si je mets le code 2 ou 3, cela s'affiche correctement dans le formulaire.
Si je mets le code 1, C'est du nuùmérique.

Avec le code en ligne de commande, j'ai ce tableau
$sort = array( SORT_ASC, SORT_DESC, SORT_ASC, SORT_ASC );

Comment faire?

Anne

Re: trier un fichier csv

par Saian » 29 févr. 2020, 16:42

J'ai dû mal à comprendre comment cela se passe avec ces 2 lignes
$args[] = &$array;
call_user_func_array('array_multisort', array_merge($args, [ &$array ]));
En fait t'as fait un mix des différentes fonctions et c'est pas bon comme ça. Coup de chance que tu n'aies pas d'erreur et que ça fonctionne. Il faut prendre la dernière si tu es en php 5.6+

Les ... c'est l'opérateur de décomposition introduit en php 5.6 :
https://www.php.net/manual/fr/migration ... atures.php

Le & c'est du passage par référence :
https://www.php.net/manual/fr/language. ... s.pass.php

Quand tu passes une variable par référence ou que le paramètre est déclaré en référence, alors la variable extérieur à la fonction est directement modifiée par la fonction. La en l'occurrence pour une raison x ou y (en regardant la doc j'ai l'impression que c'est le premier paramètre uniquement qui est déclaré en référence alors que notre tableau est transmis en dernier paramètre) la variable extérieur n'est pas modifée. Il faut donc la passer par référence pour qu'elle le soit car array_multisort ne retourne pas le tableau modifié mais retourne true ou false.

EDIT

La fonction pour php 5.3, en restant au plus simple dans l'écriture (les premiers codes étaient bêtement compliqués avec des merges inutiles), la seule différence c'est qu'il faut passer par call_user_func_array car il n'y a pas l'opérateur ... :
  function listSort($array, $sort, $direction)
  {
    $args = array();

    for ($i = 0; $i < count($sort); $i++) {
      $args[] = array_column($array, $sort[$i]);
      $args[] = $direction[$i];
    }

    $args[] = &$array;
    call_user_func_array('array_multisort', $args);

    return $array;
  }

Re: trier un fichier csv

par gentil_ecureuil » 29 févr. 2020, 16:14

php tri-csv-4.php 2020-02-28_17-44_test.csv > 2020-02-28_17-44_test-tri-3-11.csv

php en ligne de commande :
tri-csv-4.php

Code : Tout sélectionner

#!/usr/bin/php <?php $fichier = $argv[1]; // init var $delimiter = ';'; $data = []; // load the file in $data // $fileRead = fopen($fichier, 'r'); while ($line = fgetcsv($fileRead, 0, $delimiter)) $data[] = $line; fclose($fileRead); // extract header $header = array_shift($data); // extract categorized lines $categorized = array_filter($data, function ($line) { return $line[36]; }); // extract uncategorized lines $uncategorized = array_filter($data, function ($line) { return !$line[36]; }); echo "nbre categorized '".count($categorized)."'\n"; echo "nbre uncategorized '".count($uncategorized)."'\n"; // show the results // var_dump($header); // var_dump($categorized); // var_dump($uncategorized); /* $categorized = listSort( $categorized, [ 36, 0, 1, 2 ], [ SORT_ASC, SORT_DESC, SORT_ASC, SORT_ASC ]); $uncategorized = listSort( $uncategorized, [ 36, 0, 1, 2 ], [ SORT_ASC, SORT_DESC, SORT_ASC, SORT_ASC ]); */ $col = array( 36, 2, 0, 1 ); $sort = array( SORT_ASC, SORT_DESC, SORT_ASC, SORT_ASC ); var_dump($col); var_dump($sort); $prenom_tri = 1; $nom_tri = 2; $nom_complet_tri = 3; $prenom_ord = SORT_DESC; $nom_ord = SORT_ASC; $nom_complet_ord = SORT_ASC; $col[$prenom_tri] = $prenom_tri; $col[$nom_tri] = $nom_tri; $col[$nom_complet_tri] = $nom_complet_tri; $sort[$prenom_tri] = $prenom_ord; $sort[$nom_tri] = $nom_ord; $sort[$nom_complet_tri] = $nom_complet_ord; var_dump($col); var_dump($sort); $categorized = listSort( $categorized, $col, $sort); $uncategorized = listSort( $uncategorized, $col, $sort); // Maintenant on imprime chaque ligne // l'entête $ligne = implode($delimiter, $header); print "".$ligne."\n"; // chaque ligne avec catégorie non vide foreach($categorized as $line) { $ligne = implode($delimiter, $line); print "".$ligne."\n"; } // push uncategorized lines foreach($uncategorized as $line) { $ligne = implode($delimiter, $line); print "".$ligne."\n"; } function listSort($array, $sort, $direction) { $args = []; for ($i = 0; $i < count($sort); $i++) { $args[] = array_column($array, $sort[$i]); $args[] = $direction[$i]; } $args[] = &$array; call_user_func_array('array_multisort', array_merge($args, [ &$array ])); return $array; } ?>

fichier de test :
2020-02-28_17-44_test.csv

Code : Tout sélectionner

First Name;Last Name;Display Name;Nickname;E-mail Address;E-mail 2 Address;E-mail 3 Address;Home Phone;Business Phone;Mobile Phone;Home Fax;Business Fax;Pager;Home Street;Home Address 2;Home City;Home State;Home Postal Code;Home Country;Business Address;Business Address 2;Business City;Business State;Business Postal Code;Business Country;Country Code;Related name;Job Title;Department;Organization;Notes;Birthday;Anniversary;Gender;Web Page;Web Page 2;Categories Aprenom1 Anom1;;Aprenom1 Anom1;;[email protected];[email protected];;+33 1 23 45 67 89;+33 2 87 65 43 21;+33 6 12 34 56 78;+33 9 12 34 56 78;+33 9 87 65 43 21;;rue1;rue2;meylan;rhone alpes;38240;france;rue1T;rue2T;Grenoble;isere;38000;france;;;;;;notes;1604-12-08 00:00:00;;;;; Aprenom2;Anom2;Aprenom2 Anom2;;[email protected];[email protected];;+33 1 23 45 67 89;+33 9 12 34 76 78;+33 6 56 78 12 34;;;;rue D;rue D étendue;ville D;paca D;12345;france;rue T;rue T étendue;ville T;paca T;23456;france;;;;;;note lig 1 note lig 2 note lig 3;2020-01-05 00:00:00;;;www.xxx.com;;test Aprenom3;Anom3;Aprenom3 Anom3;;;;;;;+33 6 12 34 56 78;;;;;;;;;;;;;;;;;;;;;;;;;;;test Aprenom5;Anom5;Aprenom5 Anom5;;;;;;+33 9 87 65 43 21;;;;;;;;;;;;;;;;;;;;;;;;;;;; Aprenom4;Anom4;Aprenom4 Anom4;;;;;+33 1 23 45 67 89;+33 9 12 34 56 78;+33 6 87 65 43 21;;;;;;;;;;;;;;;;;;;;;;;;;;;test Aprenom7;Anom7;Aprenom7 Anom7;;;;;+33 1 23 45 67 89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;test ;Aprenom Anom;Aprenom Anom;;[email protected];[email protected];[email protected];+33 9 12 34 56 78;+33 9 87 65 43 21;+33 6 12 56 34 78;+33 8 12 34 56 78;+33 8 87 65 43 21;;rueD;;VILLED;;01234;;rueT;;VilleT;;34567;;;;;;;notes en tout genre AAAAAA aaaaaa;2019-12-18 00:00:00;;;;; ;;Aprenom6 Anom6;;;;;+33 1 23 45 67 89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;test

résutat
2020-02-28_17-44_test-tri-3-11.csv

Code : Tout sélectionner

nbre categorized '5' nbre uncategorized '3' array(4) { [0]=> int(36) [1]=> int(2) [2]=> int(0) [3]=> int(1) } array(4) { [0]=> int(4) [1]=> int(3) [2]=> int(4) [3]=> int(4) } array(4) { [0]=> int(36) [1]=> int(1) [2]=> int(2) [3]=> int(3) } array(4) { [0]=> int(4) [1]=> int(3) [2]=> int(4) [3]=> int(4) } First Name;Last Name;Display Name;Nickname;E-mail Address;E-mail 2 Address;E-mail 3 Address;Home Phone;Business Phone;Mobile Phone;Home Fax;Business Fax;Pager;Home Street;Home Address 2;Home City;Home State;Home Postal Code;Home Country;Business Address;Business Address 2;Business City;Business State;Business Postal Code;Business Country;Country Code;Related name;Job Title;Department;Organization;Notes;Birthday;Anniversary;Gender;Web Page;Web Page 2;Categories Aprenom7;Anom7;Aprenom7 Anom7;;;;;+33 1 23 45 67 89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;test Aprenom4;Anom4;Aprenom4 Anom4;;;;;+33 1 23 45 67 89;+33 9 12 34 56 78;+33 6 87 65 43 21;;;;;;;;;;;;;;;;;;;;;;;;;;;test Aprenom3;Anom3;Aprenom3 Anom3;;;;;;;+33 6 12 34 56 78;;;;;;;;;;;;;;;;;;;;;;;;;;;test Aprenom2;Anom2;Aprenom2 Anom2;;[email protected];[email protected];;+33 1 23 45 67 89;+33 9 12 34 76 78;+33 6 56 78 12 34;;;;rue D;rue D étendue;ville D;paca D;12345;france;rue T;rue T étendue;ville T;paca T;23456;france;;;;;;note lig 1 note lig 2 note lig 3;2020-01-05 00:00:00;;;www.xxx.com;;test ;;Aprenom6 Anom6;;;;;+33 1 23 45 67 89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;test ;Aprenom Anom;Aprenom Anom;;[email protected];[email protected];[email protected];+33 9 12 34 56 78;+33 9 87 65 43 21;+33 6 12 56 34 78;+33 8 12 34 56 78;+33 8 87 65 43 21;;rueD;;VILLED;;01234;;rueT;;VilleT;;34567;;;;;;;notes en tout genre AAAAAA aaaaaa;2019-12-18 00:00:00;;;;; Aprenom5;Anom5;Aprenom5 Anom5;;;;;;+33 9 87 65 43 21;;;;;;;;;;;;;;;;;;;;;;;;;;;; Aprenom1 Anom1;;Aprenom1 Anom1;;[email protected];[email protected];;+33 1 23 45 67 89;+33 2 87 65 43 21;+33 6 12 34 56 78;+33 9 12 34 56 78;+33 9 87 65 43 21;;rue1;rue2;meylan;rhone alpes;38240;france;rue1T;rue2T;Grenoble;isere;38000;france;;;;;;notes;1604-12-08 00:00:00;;;;;
Cela fonctionne
Si quelqu'un veut tester

J'ai dû mal à comprendre comment cela se passe avec ces 2 lignes
$args[] = &$array;
call_user_func_array('array_multisort', array_merge($args, [ &$array ]));

Maintenant je vais tester avec mon serveur

Merci pour tout

Re: trier un fichier csv

par gentil_ecureuil » 29 févr. 2020, 15:52

C'est pour essai pour poster

avec code

Code : Tout sélectionner

zzz
avec list
  • yyyy
avec quote
xxx