как разделить строку в массив на основе требуемого условия 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]);