Подтвердить что ты не робот

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

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

$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), но я не получаю желаемого результата. Любые предложения?

4b9b3361

Ответ 1

Существует существующая функция, которая может анализировать вашу разделенную запятыми строку. Функция 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 массив, вы получите желаемый формат:

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"
}

Ответ 2

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

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

Regex Пояснение:

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

Демо

Regex

Ответ 3

Хотя 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
)
*/

Ответ 4

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

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

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

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

Демо

Ответ 5

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

Описание: Регулярный опыт.: -

(?<=').*(?=') => Used to get all characters within single quotes(' '),

|\w+ |(OR) => Used to get rest of characters excepted comma(,) 

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