2017-01-27 2 views
2

Je veux diviser la chaîne pour tableau et stocker les valeurs dans le tableau La chaîne estcomment diviser la chaîne pour tableau en fonction de cCondition nécessaire

$string="34=No,46=fgbfb,48=NA,29=NA,45=dsd,49=InConclusive,43=1BHK,35=NA,38=12,39=2,27=q1,41=Others,52=fgfdg,47=fgfg,31=Chawl,33=UpperMiddleClass,37=SelfOwned,30=fdgfdgb,50=fgfdgb,51=fgfdg,32=NA,44=[Refrigerator,Airconditioner]"; 

J'ai essayé d'exploser (« », $ chaîne); mais je ne veux pas diviser le tableau d'objets ie (44 = [Réfrigérateur, Airconditioner]) ce que je veux comme 44 et réfrigérateur, Airconditioner

Résultats attendus: -

Array ( 
     [0] => 34=No 
     [1] => 46=fgbfb 
     [2] => 48=NA 
     [3] => 29=NA 
     [4] => 45=dsd 
     [5] => 49=InConclusive 
     [6] => 43=1BHK 
     [7] => 35=NA 
     [8] => 38=12 
     [9] => 39=2 
     [10] => 27=q1 
     [11] => 41=Others 
     [12] => 52=fgfdg 
     [13] => 47=fgfg 
     [14] => 31=Chawl 
     [15] => 33=UpperMiddleClass 
     [16] => 37=SelfOwned 
     [17] => 30=fdgfdgb 
     [18] => 50=fgfdgb 
     [19] => 51=fgfdg 
     [20] => 32=NA 
     [21] => 44=[Refrigerator,Airconditioner] 
    ) 
+0

utilisation un autre séparateur. Si vous n'avez pas le contrôle sur le séparateur dans la chaîne, vous pouvez le remplacer en utilisant preg_replace ('/, (\ d + =) /', 'XXX $ 1' Utilisez votre nouveau séparateur (XXX) pour exploser –

+0

donnez-moi l'exemple –

+0

pas d'alimentation de cuillère essayer d'abord –

Répondre

2

Solution qui travaillent dans tous les cas possibles: -

<?php 
$string="34=No,46=fgbfb,48=NA,29=NA,45=dsd,49=InConclusive,43=1BHK,35=NA,38=12,39=2,27=q1,41=Others,52=fgfdg,47=fgfg,31=Chawl,33=UpperMiddleClass,37=SelfOwned,30=fdgfdgb,50=fgfdgb,51=fgfdg,32=NA,44=[Refrigerator,Airconditioner]"; 

$string = str_replace(["[","]"], ["{","}"], $string); // convert `[` to `{` and `]` to `}` 
$array = preg_split('/(,)(?=(?:[^}]|{[^{]*})*$)/',$string); // split string by `,` and ignore `,` between `{}` 
echo "<pre/>";print_r($array); // print array 
foreach ($array as &$ar){ // iterate through array 
    $ar = str_replace(["{","}"], ["[","]"], $ar); // convert `{` to `[` and `}` to `]` 

} 

echo "<pre/>";print_r($array); // print desired array 

sortie: - https://eval.in/725457

2

Il suffit d'utiliser une expression régulière avec une bonne preg_match_all:

/\d+=(?:\[[^]]*]|[^,]*)/ 

Voir le regex demo.

Détails:

  • \d+ - 1+ chiffres
  • = - un =
  • (?:\[[^]]*]|[^,]*) - ou l'autre des 2 alternatives:
    • \[[^]]*] - un [ suivi avec 0+ caractères autres que ] et t poule un ]
    • | - ou
    • [^,]* - 0+ autres que les caractères ,.

Si les tableaux peuvent avoir imbriqué [...] à l'intérieur, vous aurez besoin d'utiliser un peu regex plus complexe (demo):

/\d+=(?:(\[(?:[^][]++|(?1))*])|[^,]*)/ 

Voir la PHP demo:

$string="34=No,46=fgbfb,48=NA,29=NA,45=dsd,49=InConclusive,43=1BHK,35=NA,38=12,39=2,27=q1,41=Others,52=fgfdg,47=fgfg,31=Chawl,33=UpperMiddleClass,37=SelfOwned,30=fdgfdgb,50=fgfdgb,51=fgfdg,32=NA,44=[Refrigerator,Airconditioner]"; 
preg_match_all('~\d+=(?:\[[^]]*]|[^,]*)~', $string, $results); 
print_r($results[0]); 
+0

@Anant: Merci de commenter, je n'ai pas remarqué le formatage était cassé :) Fixé. –

+0

de rien. –