PHP - разбить строку на массив числовых ключей

Я хочу разделить строку в PHP на часть «имя» (строка) и часть «ключи» (массив целых чисел).

Пример ввода:

 $input = "Sum(1, 5, 7)";

Желаемый результат:

 $name = "Sum";
 $keys = [1, 5, 7];

Я смотрел на взорваться, str_split preg_split, и я уверен, что есть много возможных реализаций. Какое самое элегантное решение?


person mtmacdonald    schedule 21.02.2014    source источник
comment
А что насчет Sum(1, Sum(1, 5, 7), 7) ? Каков ожидаемый результат?   -  person HamZa    schedule 21.02.2014
comment
Всегда ли это в скобке форматного слова с разделителями-запятыми?   -  person Grim...    schedule 21.02.2014
comment
@Грим, отличные вопросы. Да, я ожидаю, что это всегда будет скобка слов с разделителями-запятыми. Пример HamZa будет недопустимым (незаконным) вводом. Строка находится в файле конфигурации, поэтому я могу контролировать неожиданные входные данные.   -  person mtmacdonald    schedule 21.02.2014
comment
@MMacdonald Является ли ввод Sum(1, 5, 7) или может быть несколько частей, таких как Sum(1, 5, 7) , Div(10, 5), Mul(3, 4)?   -  person HamZa    schedule 21.02.2014
comment
@HamZa - исключительно Sum(1, 5, 7) ... слово, скобка, числа с разделителями-запятыми, скобка. Никаких других вариаций.   -  person mtmacdonald    schedule 21.02.2014
comment
@MMacdonald Я думаю, вам следует использовать решение ua6xh. Взорвите вторую часть или разделите ее с помощью \s*,\s* с помощью preg_split().   -  person HamZa    schedule 21.02.2014


Ответы (2)


$input = "Sum(1, 5, 7)";

preg_match_all('#(\w+)\((.*?)\)#', $input, $m);

print_r($m);

Пример Ideone.com

person Opalosolo    schedule 21.02.2014
comment
кажется хорошим началом, но на самом деле это возвращает «1, 5, 7» в виде строки, а не в виде массива. - person mtmacdonald; 21.02.2014
comment
оттуда просто взорвите строку в массив. - person Jon; 21.02.2014

Попробуйте это:

$input = "Sum(1, 5, 7)";

$split1=explode('(',$input);

$name=$split1[0];
echo $name;
$newk=rtrim($split1[1],')');
echo '<br>';
$keys=explode(',',$newk);
print_r($keys)

Онлайн-демонстрация

person Karthick Kumar    schedule 21.02.2014
comment
Пожалуйста, поместите код в ответ, чтобы ответ не был просто ссылкой. - person Jon; 21.02.2014