Я хочу взорвать переменную несколько иначе

У меня есть эта переменная.

$var = "A,B,C,D,'1,2,3,4,5,6',E,F"; 

Я хочу взорвать его, чтобы получить следующий массив.

 array( [0] => A, [1] => B, [2] => C, [3] => D, [4] => 1,2,3,4,5,6, [5] => E, [6] => F ); 

Я использовал explode(',',$var) но я не получаю желаемого результата. Какие-либо предложения?

Существует существующая функция, которая может анализировать вашу разделенную запятыми строку. Функция str_getcsv

Это подпись такая:

 array str_getcsv ( string $input [, string $delimiter = "," [, string $enclosure = '"' [, string $escape = "\\" ]]] ) 

Единственное изменение – изменить третью переменную, оболочку, на одинарные кавычки, а не на двойные кавычки по умолчанию.

Вот пример.

 $var = "A,B,C,D,'1,2,3,4,5,6',E,F"; $array = str_getcsv($var,',',"'"); 

Если вы var_dump массив, вы получите var_dump формат:

 array(7) { [0]=> string(1) "A" [1]=> string(1) "B" [2]=> string(1) "C" [3]=> string(1) "D" [4]=> string(11) "1,2,3,4,5,6" [5]=> string(1) "E" [6]=> string(1) "F" } 

Просто используйте preg_match_all со следующим регулярным выражением следующим образом

 preg_match_all("/(?<=').*(?=')|\w+/",$var,$m); print_r($m[0]); 

Регулярное выражение Пояснение:

  • (?<=').*(?=') Захват каждого символа внутри '(quotes)
  • |\w+ |(OR) Будет хватать остальную часть символов, кроме ,

демонстрация

Regex

Несмотря на то, что preg_split вместе с array_map работает очень хорошо, см. Ниже пример с использованием explode и trim

 $var = "A,B,C,D,'1,2,3,4,5,6',E,F"; $a = explode("'",$var); //print_r($a); /* outputs Array ( [0] => A,B,C,D, [1] => 1,2,3,4,5,6 [2] => ,E,F ) */ $firstPart = explode(',',trim($a[0],',')); //take out the trailing comma /* print_r($firstPart); outputs Array ( [0] => A [1] => B [2] => C [3] => D ) */ $secondPart = array($a[1]); $thirdPart = explode(',',trim($a[2],',')); //tale out the leading comma /* print_r($thirdPart); Array ( [0] => E [1] => F ) */ $fullArray = array_merge($firstPart,$secondPart,$thirdPart); print_r($fullArray); /* ouputs Array ( [0] => A [1] => B [2] => C [3] => D [4] => 1,2,3,4,5,6 [5] => E [6] => F ) */ 

Вам нужно взорвать строку в массиве.

Но вам нужны запятые после каждого элемента, кроме последнего.

Вот рабочий пример:

 <?php $var = "A,B,C,D,'1,2,3,4,5,6',E,F"; $arr = explode("'", $var); $num = ! empty($arr[1]) ? str_replace(',', '_', $arr[1]) : ''; $nt = $arr[0] . $num . $arr[2]; $nt = explode(',', $nt); $len = count($nt); $na = array(); $cnt = 0; foreach ($nt as $v) { $v = str_replace('_', ',', $v); $v .= ($cnt != $len - 1) ? ',' : ''; $na[] = $v; ++$cnt; } 

демонстрация

 $var = "A,B,C,D,'1,2,3,4,5,6',E,F"; $arr = preg_split("/(,)(?=(?:[^']|'[^']*')*$)/",$var); foreach ($arr as $data) { $requiredData[] = str_replace("'","",$data); } echo '<pre>'; print_r($requiredData); 

Описание: Regular Exp. : –

 (?<=').*(?=') => Used to get all characters within single quotes(' '), |\w+ |(OR) => Used to get rest of characters excepted comma(,) 

Затем внутри цикла foreach я заменяю одиночную кавычку