2010-08-21 2 views
1

Используя PHP, я пытаюсь дать каждому конкретному тексту свою собственную переменную. Я считаю, что это может быть достигнуто с помощью функции списка взрывов в php. Нечто похожее на приведенный ниже код:PHP List Explode Variable

list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data); 

Тем не менее, приведенный выше код отделяет текст, используя двоеточие (:). Текст, который я хотел бы разделить, заключен в кавычки, например "WORD". Пример текста я хотел бы разделить, как показано ниже:

"AULLAH1" "01/07/2010 15:28" "55621454" "123456" "123456,00"

Я бы как текст/цифры AULLAH1, 01/07/2010 15:28, 55621454, 123456, 123456.00 для всех имеют определенную переменную PHP. Если возможно, я хотел бы, чтобы функция взрыва PHP отделяла контент по начальной цитате (") и завершающей цитате (").

+0

В конечном итоге или во входящих данных? –

+0

(1) У вас есть контроль над тем, как эти файлы создаются? (2) Рассматривали ли вы использование фактической базы данных? – quantumSoup

+0

** Пекка **: Спасибо за ваш ответ, я очень ценю это. Я бы хотел, чтобы это были входящие данные. Еще раз спасибо за ваш ответ. :) ** quantSoup **: Во-первых, спасибо за ваш ответ, я очень ценю их. ;) (1) Это только один файл, кроме этого есть много шагов. Найти, чтобы дать следующую переменную, все, что мне нужно в данный момент. (2) Мне говорили об этом раньше, но, к сожалению, у меня нет возможности сделать это. Благодарю за ваш ответ. ;) – AUllah1

ответ

3

Лучший способ заключается в использовании preg_match_all:

$s = '"AULLAH1" "01/07/2010 15:28 " "55621454" "123456" "123456.00"'; 
preg_match_all('/"([^"]*)"/', $s, $matches); 
list($user, $pass, $uid, $gid, $gecos, $home, $shell) = $matches[1]; 

Наиболее simliar способом было бы использовать preg_split:

list($user, $pass, $uid, $gid, $gecos, $home, $shell) = 
    preg_split('/"(?: ")?/', $s, -1, PREG_SPLIT_NO_EMPTY); 
+0

@ Тимви, это не подводит; при присвоении 'list' дает' NULL' '$ home' и' $ shell' в этом случае. – strager

+0

@strager Было ли это ошибкой? ОП не упоминает об этом и согласуется с его текущим решением. – Artefacto

+0

Ah OK, вы ответили на комментарий, который был удален. – Artefacto

1

Это решение Простейшим, но, конечно, не самый надежный:

$data = '"AULLAH1" "01/07/2010 15:28 " "55621454" "123456" "123456.00"'; 

list($user, $pass, $uid, $gid, $gecos, $home, $shell) 
    = explode('" "', trim($data, '"')); 

var_dump(array($user, $pass, $uid, $gid, $gecos, $home, $shell)); 

// gives: 
array(7) { 
    [0]=> 
    string(7) "AULLAH1" 
    [1]=> 
    string(17) "01/07/2010 15:28 " 
    [2]=> 
    string(8) "55621454" 
    [3]=> 
    string(6) "123456" 
    [4]=> 
    string(9) "123456.00" 
    [5]=> 
    NULL 
    [6]=> 
    NULL 
} 
+0

Привет, Стрэгер, я очень ценю ваш ответ, а также ваши усилия. Честно говоря, мне не нравится идея собирать данные, хотя я понимаю, что это может быть очень полезно время от времени. Извините, если я, кажется, даю вам отрицательную вибрацию, как было сказано ранее, я благодарен вам, что вы ответили. ;) Спасибо. – AUllah1

+0

@AUl Узел был предназначен только для показа. – Artefacto

+0

@ AUllah1, @Artefacto правильный; Я просто помещал элементы в массив, чтобы легко просмотреть «var_dump», чтобы показать, что он работает так, как ожидалось. – strager

1

Это должно быть сделано с регулярным выражением. Для этого см. Функцию preg_match.

+1

Это некачественное и лучше позиционируется как комментарий. – mickmackusa

0
explode('-', str_replace('"', '', str_replace('" "', '"-"', $data))); 
+0

Это не сработает на '' 01/07/2010 15:28 ". – strager

+0

Привет, Омар, спасибо за ваш ответ. Я очень ценю это. Как упоминалось strager, он потерпел неудачу в этом конкретном месте. :(Опять же, я действительно ценю ваш ответ, а также ваши усилия.;) – AUllah1

+0

Хорошо. Изменено. –