как разделить строку в массив на основе требуемого условия CC
Я хочу разделить строку на массив и сохранить значения в таблице Строка
$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); но я не хочу разбивать массив объектов ie (44=[холодильник, кондиционер]) это я хочу как 44 и холодильник, кондиционер
Ожидаемый результат: -
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]
)
2 ответа:
Решение, которое работает во всех возможных случаях: -
<?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Вывод: - https://eval.in/725457
Просто используйте правильное регулярное выражение с
preg_match_all:/\d+=(?:\[[^]]*]|[^,]*)/Смотрите демонстрацию регулярных выражений .
Подробности :
\d+- 1 + цифры=- a=(?:\[[^]]*]|[^,]*)- любая из двух альтернатив:
\[[^]]*]- в[затем с 0+ символы другие, чем]а потом]|- или[^,]*- 0+ символы, отличные от,.Если массивы могут иметь вложенные
[...]внутри, вам нужно будет использовать немного более сложное регулярное выражение (demo):/\d+=(?:(\[(?:[^][]++|(?1))*])|[^,]*)/Смотрите 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]);