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

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]);