2017-01-27 1 views
2

ich die Zeichenfolge um Array teilen möchten und speichern Sie die Werte in der Tabelle Der String istwie die Zeichenfolge um Array aufzuteilen, basierend auf erforderlichen cCondition

$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]"; 

ich explodieren versucht (‚‘, $ Zeichenfolge); aber ich will nicht das Objekt Array dh (44 = [Kühlschrank, Klimaanlage]) das ich will, wie 44 und Kühlschrank, Klimaanlage

Erwartetes Ergebnis aufzuspalten: -

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

Einsatz ein anderes Trennzeichen. Wenn Sie keine Kontrolle über das Trennzeichen in der Zeichenfolge haben, können Sie es mit preg_replace ('/, (\ d + =) /', 'XXX $ 1' ersetzen. Verwenden Sie stattdessen Ihr neues Trennzeichen (XXX), um –

+0

zu explodieren Geben Sie mir ein Beispiel –

+0

kein Löffel Fütterung versuchen Sie es zuerst –

Antwort

2

Lösung, die Arbeit in alle möglichen Fälle: -

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

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

2

Nur eine richtige regex mit preg_match_all verwenden:

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

Siehe die regex demo.

Einzelheiten:

  • \d+ - 1+ Ziffern
  • = - ein =
  • (?:\[[^]]*]|[^,]*) - eine der zwei Alternativen:
    • \[[^]]*] - ein [ gefolgt mit 0+ andere Zeichen als ] und t Henne ein ]
    • | - oder
    • [^,]* - 0+ Zeichen andere als ,.

Wenn die Arrays [...] innen geschachtelt haben können, müssen Sie ein wenig komplexer Regex verwenden (demo):

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

Siehe 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: Vielen Dank für die Kommentare, habe ich nicht bemerkt, die Formatierung war kaputt :) Fest. –

+0

Gern geschehen. –

Verwandte Themen