[PHP] fonction qui retourne deux tableaux [Résolu/Fermé]

Signaler
Messages postés
19
Date d'inscription
mardi 6 juillet 2010
Statut
Membre
Dernière intervention
10 août 2010
-
Messages postés
2987
Date d'inscription
lundi 7 juin 2010
Statut
Membre
Dernière intervention
17 avril 2014
-
Bonjour,

j'ai la variable $champs suivante : R0910R1002R1001RR1001.
qui contient deux types d'informations : par exemple un champs de type R0911 veut dire que Recu le 09/11/2010

je voudrais une fonction qui me retourne deux listes $etat et $date que je pourrais importer dans une base de données Mysql. Voila un petit shema pour illustrer cela:

champs etat date
R0910 True 2010/10/09
R1002 True 2010/02/10
R1001 True 2010/01/10
R True (Null ou autre)
R1001 True 2010/01/10

le premier gros problème que j'ai c'est que visiblement $champs n'est pas un tableau et du coup je n'arrive pas à le manipuler. Le deuxième est que je ne sais pas faire de fonction qui retourne deux variables en php.

Si quelqu'un peut m'aider à resoudre l'un (ou les deux problèmes j'apprecierai enormement )

Merci beaucoup

4 réponses

Messages postés
2987
Date d'inscription
lundi 7 juin 2010
Statut
Membre
Dernière intervention
17 avril 2014
355
En gros tu veux découper une chaîne de caractère de façon à séparer les infos qui t'intéresse. Voici qui peut t'être utile :

https://www.php.net/manual/fr/function.substr.php
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
19
Date d'inscription
mardi 6 juillet 2010
Statut
Membre
Dernière intervention
10 août 2010

le problème est qu'il ne me traite pas $champs comme une seule chaine de caractères
normalement si je fais substr("R1002R1005R0909",5) il doit me retourner R1005R0909
et lui il supprime tout pcq jai limpression qu'il me fait un substr("R****",5 ) sur tous les blocs
Messages postés
2987
Date d'inscription
lundi 7 juin 2010
Statut
Membre
Dernière intervention
17 avril 2014
355
Ah oui je n'avais pas vu. Tu peux me montrer comment est initialisé $champs?
Messages postés
19
Date d'inscription
mardi 6 juillet 2010
Statut
Membre
Dernière intervention
10 août 2010

c'est un peu long pcq c'est un champs excel et que ce n'est pas le seul à etre extrait
donne moi un peu de temps histoire d'isoler les informations utiles
merci de ton aide en tout cas
Messages postés
2987
Date d'inscription
lundi 7 juin 2010
Statut
Membre
Dernière intervention
17 avril 2014
355
Son comportement fais quand même bien penser à un tableau...

Si tu fais
 echo $champs[0]; 
echo $champs[1]; 
...


ça donne quoi??
Messages postés
19
Date d'inscription
mardi 6 juillet 2010
Statut
Membre
Dernière intervention
10 août 2010

désolé pour le retard
quand je fais echo $champs[2];
ca me donne ceci :
Notice: Uninitialized string offset: 2 in C:\wamp\www\test\Copie de importation1\index2.php on line 153
Messages postés
3660
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
1 décembre 2020
977
Bonjour,

Déjà, il faudrait savoir ce qu'est la variable $champs.

Je te conseille donc de mettre ce bout de code :
var_dump($champs);

Ensuite, pour mieux visualiser le résultat, il est préférable d'afficher le code source de la page dans le navigateur (pour avoir les retours à la ligne, sinon on ne voit rien c'est tout sur une ligne).

Xavier
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
3660
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
1 décembre 2020
977
T'as rien oublié ? Y a pas un array() quelque chose tout au début ?
Parce que là, ça ne ressemble pas à un tableau mais plutôt à des variables de chaînes mises bout à bout...
Messages postés
2987
Date d'inscription
lundi 7 juin 2010
Statut
Membre
Dernière intervention
17 avril 2014
355
Oui ça ressemble à un tableau de string mais sans en être un. Je sais pas exactement quel type de variable c'est...
Messages postés
19
Date d'inscription
mardi 6 juillet 2010
Statut
Membre
Dernière intervention
10 août 2010

si ca peut vous aider je vous remets dans le contexte de mon projet :
l'idée est d'importer des données reparties dans une feuille CSV vers uen table MySql.
Donc j'importe le fichier et je l'ouvre : $fp = fopen ($_FILES["userfile"]["tmp_name"], "r");
puis je fais :
while (!feof($fp)) {
$ligne = fgets($fp,4096);
$liste = explode(";",$ligne); // je cree un tableau des données séparés par un ;
$liste[8] = ( isset($liste[8]) ) ? $liste[8] : Null; // je recupère le champs qui m'interesse
$champs=$liste[8];
ET voila mon champ
Messages postés
3660
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
1 décembre 2020
977
Aaaah !
Et le var_dump, tu l'avais mis dans la boucle ?

Mais dans ce cas-là, ton $champs est écrasé à chaque fois !
Il ne contient jamais que la dernière ligne de ton fichier...

Pour le mettre dans un tableau, il faudrait d'abord l'instancier, avant le while :
$champs = array();

Puis, dans la boucle, tu mets
$champs[] = $liste[8];

Maintenant tu peux parcourir $champs comme un tableau :)

Xavier
Messages postés
19
Date d'inscription
mardi 6 juillet 2010
Statut
Membre
Dernière intervention
10 août 2010

merci je vais tester ca et je te dis si ca marche
merci en tout cas
Messages postés
19
Date d'inscription
mardi 6 juillet 2010
Statut
Membre
Dernière intervention
10 août 2010

salut
j'ai tenté une nouvelle approche
j'ai crée un nouveau topic
https://forums.commentcamarche.net/forum/programmation-3/new#frmnewa
si vous avez une idée je suis preneur
Messages postés
19
Date d'inscription
mardi 6 juillet 2010
Statut
Membre
Dernière intervention
10 août 2010

salut

ben finalement même si le type de mon champs est bizarre , substr arrive à gérer comme tu l'as suggéré Breub62 .La fonction var_dump a été très utile dans ce sense la. Merci beaucoup tout le monde et désolé pour le temps perdu . Pour la peine je mets ma solution ( on sait jamais )

$champs_etat= substr($champs,0,-4);
$champs_int= str_replace( 'R', 'true',$champs_etat );
$champs_date= substr($champs,5);

c'etait tout con

Re Merci tout le monde
Messages postés
2987
Date d'inscription
lundi 7 juin 2010
Statut
Membre
Dernière intervention
17 avril 2014
355
De rien. Bonne continuation ;-)