2017-02-22 20 views
0

У меня есть значение существующего массива, который выглядит следующим образом:Создание массива из текста между скобками запятыми значения

Product One (Amount: 199.99 USD, Select Option: Option One, Product One (CRM): 1) 

То, что я пытаюсь выйти из этого является массивом, который выглядит следующим образом :

Product One 
    Amount: 199.99 USD 
    Select Option: Option One 
    Product One (CRM): 1 

То, что я попытался это:

$product_arr = json_decode($product_details[0]); 
$prod_arr_add = preg_split('/[\,(]+/', $product_arr[0]); 
print_r ($prod_arr_add); 

Который выглядит следующим образом:

Array 
(
    [0] => Product One 
    [1] => Amount: 199.99 USD 
    [2] => Select Option: Option One 
    [3] => Product One 
    [4] => CRM): 1) 
) 

И другие попытки с отклонениями от того, что я пробовал, не дали аналогичных результатов.

Как разбить строку текста на массив?

+0

** Пользователь удален комментарий выше. Предлагаемый я использую explode() - Хорошо, попробовал это. Это то, что я получаю: 'Массив ( [0] => Product One (Сумма: 199,99 USD [1] => Опция: Вариант один [2] => Product One (CRM): 1) ) ' Как я могу удалить две круглые скобки? – jarmerson

+0

Если шаблон хранится во всех продуктах, вы можете попытаться использовать регулярное выражение, подобное [this one] (https://regex101.com/r/aRmO1k/1). – sevavietl

ответ

0

Имея только одну пробную строку для проверки, я делаю некоторые предположения и жертву эффективности регулярных выражений. Если это решение нужно затянуть, прокомментируйте и/или отредактируйте свой вопрос.

$regex="/^(.+?)\s\((.*?),\s(.*?),\s(.*)\)$/"; 
$string="Product One (Amount: 199.99 USD, Select Option: Option One, Product One (CRM): 1)"; 

if(preg_match($regex,$string,$matches)){ 
    $prod_arr_add=array_slice($matches,1); // remove first element from the array (fullmatch) 
    echo "<pre>"; 
     var_export($prod_arr_add); 
    echo "</pre>"; 
}else{ 
    echo "no match"; 
} 

Выход:

array (
    0 => 'Product One', 
    1 => 'Amount: 199.99 USD', 
    2 => 'Select Option: Option One', 
    3 => 'Product One (CRM): 1' 
) 

Regex:

^(.+?)\s\( #Capture everything from the start to a space followed by a opening parenthesis 
(.*?),\s #Capture everything before a comma followed by a space 
(.*?),\s #Capture everything before a comma followed by a space 
(.*)\)$  #Capture everything before a closing parenthesis at the end of the string 
+0

Не могли бы вы объяснить регулярное выражение, которое вы там использовали? – jarmerson

+0

@jarmerson ответ отредактирован. Если это удовлетворит ваш вопрос, пожалуйста, пожалуйте мне зеленый галочку, если не сообщите мне, что еще проблема. – mickmackusa

+0

Awesome. В настоящее время я работаю над отдельным проектом, но это планируется продолжить на следующей неделе, и я обязательно попробую его и вернусь к вам. – jarmerson

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

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