2017-01-27 16 views
2

Я хочу, чтобы разбить строку, чтобы массив и хранить значения в таблице Строкакак разбить строку, чтобы массив на основе требуемой 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]"; 

Я попытался взорвать («», $ строка); , но я не хочу, чтобы разделить массив объектов т.е. (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] 
    ) 
+0

другой разделитель. Если у вас нет контроля над разделителем в строке, вы можете его заменить, используя preg_replace ('/, (\ d + =) /', 'XXX $ 1'. Вместо этого используйте новый разделитель (XXX), чтобы взорваться –

+0

. дайте мне пример. –

+0

нет кормления ложкой. попробуйте сначала –

ответ

2

Solution, которые работают в все возможные случаи: -

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

2

Просто используйте правильное регулярное выражение с preg_match_all:

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

См. regex demo.

Детали:

  • \d+ - 1+ цифры
  • = - это =
  • (?:\[[^]]*]|[^,]*) - либо из 2-х вариантов:
    • \[[^]]*] - это [ последовало 0+ символы, отличные от ] и t Куриные а ]
    • | - или
    • [^,]* - 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]); 
+0

@Anant: Спасибо за комментарий, я не заметил, что форматирование было сломанный :) Исправлено. –

+0

добро пожаловать. –

 Смежные вопросы

  • Нет связанных вопросов^_^