2012-06-01 4 views
1

Я отправляю из flex массив в свой php-скрипт. Строка для разделения похожа на [F1, 3, true] [Urg, 4, false] Я бы использовал эту информацию для обновления записи в базе данных mySql.Разделить строку на массив с шаблоном

Например [F1, 3, true] - это запись, подобная этой [Name, Id, Visible].

Но я не могу разделить использование информации.

Спасибо за помощь

+2

Почему вы не отправляете данные json или какой-либо другой сериализуемый формат данных? – tigrang

ответ

0

Если вы действительно настаиваете на том формате, который вы могли бы попробовать preg_match.

$string = '[F1, 3, true][Urg, 4, false][asd,  1337, TrUe]'; 
preg_match_all('/\[(\w+),\s*?(\d+),\s*?(true|false)\]/i', $string, $matches, PREG_SET_ORDER); 

С этим вы получите двумерный массив, каждый элемент массива будет массивом. Первым элементом в каждом массиве является строка данных совпадений, следующие элементы - это проанализированные данные. Элементы могут быть разделены как можно большим количеством пробельных символов, случай булевского значения не имеет значения.

+0

Я пытаюсь использовать ваше объяснение, но $ matches пуст. Я тестирую с помощью $ arrayTest = $ matches [0] [0]. ",". $ соответствует [0] [1]; И результат - это только запятая. Ты знаешь почему? – Flex60460

+0

Ваши данные не поступают в указанном вами формате. Взгляните на http://codepad.viper-7.com/rE2CD2, чтобы увидеть рабочий пример. – clentfort

0

Вы можете удалить скобки:

$txt = substr($txt, 1, -1); 

И взрываются:

$array = explode(',', $txt) 
0

Я надеюсь, что нет запятых или квадратные скобки в ваших строках данных - которые могли бы сделать это невозможно! Но если предположить, нет ни одного из них:

preg_match_all('/\[([^\]]*)\]/', $text, $matches); 
return array_map(function($match) { 
    return array_map('trim', explode(',', $match)); 
}, $matches[1]); 

(которая использует оболочку, которая поддерживается только в PHP 5.3 и более поздних версий, если вы находитесь на старой версии, вы можете изменить его в петлю Еогеасп довольно легко.)

+0

С этим вы получаете результат в массиве как первый элемент массива из одного элемента. – clentfort

+0

Извините, не удалось правильно использовать 'preg_match_all'. Теперь это исправлено. – Brilliand

+0

@clentfort: результатом должен быть двумерный массив. Если вы предоставляете только одну строку данных, то да, вы получите массив, содержащий один массив. – Brilliand

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