Passer string en array

Passer string en array - PHP - Programmation

Marsh Posté le 01-08-2011 à 08:57:12    

Salut,
 
J'ai besoin de préparer une syntaxe en php ; sous la forme de "string" pour la passer en "array" par la suite ; hors apres 2 heures d'essais je n'y arrive pas. Voici mon code actuel :
 

Code :
  1. for ( $i = 1; $i<= $cr; $i++ )
  2. $crew_temp.= "'Title EN'=>'cr_en_$i','Title FR'=>'cr_fr_$i','First name'=>'cr_fn_$i','Last name'=>'cr_ln_$i',";
  3. $crew_temp = substr($crew_temp,0,strlen($crew_temp)-1);
  4. $crew_temp = explode(',',$crew_temp);
  5. $crew_tbs = array();


 
J'ai besoin que $crew_tbs ait la "forme" de $crew_temp au final ; c'est à dire passer le contenu de $crew_temp qui est en string à $crew_tbs en array. Je n'y arrive pas ; si vous avez une idée, merci.
 


---------------
Google est ton ami !
Reply

Marsh Posté le 01-08-2011 à 08:57:12   

Reply

Marsh Posté le 01-08-2011 à 10:01:19    

le 1er explode sur "," va te donner un tableau avec les clés associées aux valeurs (ex : "'Titi' => 'toto'" ).
Faut faire une boucle sur ce tableau et faire un explode sur "=>"

Code :
  1. $crew_temp = explode(',',$crew_temp);
  2. $crew_tbs = array();
  3. foreach($crew_temp as $i => $CurrentValue)
  4. {
  5.    $ArrayTmp = explode('=>', $CurrentValue);
  6.    $crew_tbs[$ArrayTmp[0]] = $ArrayTmp[1];
  7.    unset($ArrayTmp);
  8. }
  9.  
  10. print_r($crew_tbs);


 
Un truc du genre devrait marcher...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 01-08-2011 à 10:24:54    

Merci de ta réponse, mais j'avais fais quelque chose de similaire :
 

Code :
  1. foreach($crew_temp AS $key=>$value) {
  2. $temp_name = str_replace("'",'',explode('=>',$value));
  3. array_push($crew_tbs,array($temp_name[0]=>$temp_name[1]));
  4. }


 
Le problème est que dans ce cas de figure ; le dernier $i de la boucle, vas être la valeur donnée à Title EN par ex.
 
Hors justement, j'ai besoin d'avoir plusieurs Title EN=>cr_en_1, Title EN=>cr_en_2 ...
 
Et là on obtiens que le dernier de la boucle. Une autre idée svp ?


---------------
Google est ton ami !
Reply

Marsh Posté le 01-08-2011 à 10:41:01    

Tu m'avais pas dit qu'une même clé pouvait voir plusieurs valeurs :/ Suffit juste de faire ça :  

Code :
  1. $crew_temp = explode(',',$crew_temp);
  2. $crew_tbs = array();
  3. foreach($crew_temp as $i => $CurrentValue)
  4. {
  5.    $ArrayTmp = explode('=>', $CurrentValue);
  6.    if (array_key_exists($ArrayTmp[0], $crew_tbs))
  7.    {
  8.        $crew_tbs[$ArrayTmp[0]][] = $ArrayTmp[1];
  9.    }
  10.    else
  11.    {
  12.         $crew_tbs[$ArrayTmp[0]] = $ArrayTmp[1];
  13.    }
  14.  
  15.    unset($ArrayTmp);
  16. }
  17.  
  18. print_r($crew_tbs);


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 01-08-2011 à 12:05:30    

Je me retrouves désormais avec cette erreur et sinon oui désolé j'avais oublié de préciser en effet :
 
( ! ) Fatal error: [] operator not supported for strings in D:\wamp2\www\valentine\admin\pages\title_step3.php on line 128


---------------
Google est ton ami !
Reply

Marsh Posté le 01-08-2011 à 12:08:55    

oops, logique, la clé ayant en première valeur une chaîne, ajouter un tableau derrière, il va pas apprécier...

Code :
  1. $crew_temp = explode(',',$crew_temp);
  2. $crew_tbs = array();
  3. foreach($crew_temp as $i => $CurrentValue)
  4. {
  5.    $ArrayTmp = explode('=>', $CurrentValue);
  6.    if (array_key_exists($ArrayTmp[0], $crew_tbs))
  7.    {
  8.        $TmpValue = $crew_tbs[$ArrayTmp[0]];
  9.        $crew_tbs[$ArrayTmp[0]] = array($TmpValue, $ArrayTmp[1]);
  10.        unset($TmpValue);
  11.    }
  12.    else
  13.    {
  14.         $crew_tbs[$ArrayTmp[0]] = $ArrayTmp[1];
  15.    }
  16.  
  17.    unset($ArrayTmp);
  18. }
  19.  
  20. print_r($crew_tbs);


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 01-08-2011 à 12:39:25    

Petit à petit on s'en rapproche mais je n'ai toujours pas la forme finale que je veux ... En effet j'obtiens ceci :
 

Code :
  1. Array ( ['Title EN'] => Array ( [0] => 'cr_en_1' [1] => 'cr_en_2' ) ['Title FR'] => Array ( [0] => 'cr_fr_1' [1] => 'cr_fr_2' ) ['First name'] => Array ( [0] => 'cr_fn_1' [1] => 'cr_fn_2' ) ['Last name'] => Array ( [0] => 'cr_ln_1' [1] => 'cr_ln_2' ) )


 
Et je voudrais que ca ait cette forme (dans mon code php, ce devrait être ceci en fait) :
 

Code :
  1. $crew_tbs = array('Title EN'=>'cr_en_1','Title FR'=>'cr_fr_1','First name'=>'cr_fn_1','Last name'=>'cr_ln_1','Title EN'=>'cr_en_2','Title FR'=>'cr_fr_2','First name'=>'cr_fn_2','Last name'=>'cr_ln_2');


 
Pourquoi tout ca en fait ? Car j'ai besoin de mettre en forme cette syntaxe pour l'utiliser avec un moteur de template (TBS) ; dans la partie MergeBlock.
 
Merci.


---------------
Google est ton ami !
Reply

Marsh Posté le 01-08-2011 à 13:24:55    

djflexlive a écrit :

Petit à petit on s'en rapproche mais je n'ai toujours pas la forme finale que je veux ... En effet j'obtiens ceci :
 

Code :
  1. Array ( ['Title EN'] => Array ( [0] => 'cr_en_1' [1] => 'cr_en_2' ) ['Title FR'] => Array ( [0] => 'cr_fr_1' [1] => 'cr_fr_2' ) ['First name'] => Array ( [0] => 'cr_fn_1' [1] => 'cr_fn_2' ) ['Last name'] => Array ( [0] => 'cr_ln_1' [1] => 'cr_ln_2' ) )


 
Et je voudrais que ca ait cette forme (dans mon code php, ce devrait être ceci en fait) :
 

Code :
  1. $crew_tbs = array('Title EN'=>'cr_en_1','Title FR'=>'cr_fr_1','First name'=>'cr_fn_1','Last name'=>'cr_ln_1','Title EN'=>'cr_en_2','Title FR'=>'cr_fr_2','First name'=>'cr_fn_2','Last name'=>'cr_ln_2');


 
Pourquoi tout ca en fait ? Car j'ai besoin de mettre en forme cette syntaxe pour l'utiliser avec un moteur de template (TBS) ; dans la partie MergeBlock.
 
Merci.


 
Sauf que la forme que tu veux obtenir n'est pas possible, gros malin :/ Tu ne peux pas avoir 2 clés avec dans un même tableau avec des valeurs différents... :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 01-08-2011 à 14:21:46    

C'est bien ce que je pensais ... Je vais essayer de voir sur le forum du moteur de template et revenir par ici ...
 
Désolé...


---------------
Google est ton ami !
Reply

Marsh Posté le 01-08-2011 à 16:39:56    

Ben change la structure :

Code :
  1.         array('Title EN'=>'cr_en_1','Title FR'=>'cr_fr_1','First name'=>'cr_fn_1','Last name'=>'cr_ln_1'),
  2.         array('Title EN'=>'cr_en_2','Title FR'=>'cr_fr_2','First name'=>'cr_fn_2','Last name'=>'cr_ln_2')
  3.    );


 
Ca pourrait pas le faire?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 01-08-2011 à 16:39:56   

Reply

Marsh Posté le 11-08-2011 à 13:47:43    

En effet c'est ce que j'ai du faire au final pour que tout fonctionne.
 
Je débutes sur les moteurs de template et parfois je m’emmêles les pinceaux ... Notamment au niveau des arrays ;)
 
Merci de ton support.


---------------
Google est ton ami !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed