В моем приложении есть текстовое поле, которое мои пользователи должны вводить в формате:
Forename, Surname, YYYY-MM-DD, Company
Forename, Surname, YYYY-MM-DD, Company
на каждой строке. Мое намерение состоит в том, чтобы затем циклически проходить через каждый ряд, взрываясь через запятую и обрезая все пробелы.
Затем мне нужно передать разобранный массив в ассоциативный массив. Сейчас я делаю это вручную, исходя из предположения, что пользователь ввел данные в правильном порядке и формате; который работает, но полагается, что пользователь не портит.
Что бы вы предложили как лучший способ сделать это? Я думаю, что способ проверки каждого индекса, чтобы увидеть, пустой он или нет, кажется довольно неуклюжим, а также подверженным ошибкам.
Любые предложения или вещи для рассмотрения?
/************************************
* sample data from textarea:
* Name, Surname, 1980-02-22, Company
* Foo, Bar, 1970-05-12, Baz
************************************/
$data = preg_split('/\r\n|\n/', $_POST['data'],
-1, PREG_SPLIT_NO_EMPTY);
$item = array();
// loop through the data
foreach($data as $row) :
// trim and explode each line in to an array
$item[] = array_map('trim', explode(',', $row));
endforeach;
$k=0;
foreach($item as $user) :
$processed_data[$k]['first_name'] = !empty($user[0]) ? $user[0] : NULL;
$processed_data[$k]['last_name'] = !empty($user[1]) ? $user[1] : NULL;
if(!empty($user[2])) :
$dob = strtotime($user[2]);
if($dob) {
$processed_data[$k]['dob'] = $user[2];
} else {
$processed_data[$k]['dob'] = NULL;
}
else:
$processed_data[$k]['dob'] = NULL;
endif;
$processed_data[$k]['company'] = !empty($user[3]) ? $user[3] : NULL;
$k++;
endforeach;
// print_r($processed_data);