Выглядит так, как будто вам нужно будет извлекать тип поля из каждого значения, но я не уверен, что это уместно, но я преобразовал это в ключ для поля на случай, если вам это нужно (разница не велика) в любом случае).
По сути, каждая строка читается как строка CSV (ограниченная ;
), затем для каждого поля explode()
она равна #
и, если есть 2 поля, добавьте ее в выходной массив ($data
) ...
$fileName = "data.csv";
$handle = fopen ( $fileName, "r" );
while ( !feof($handle) ) {
$fileData = fgetcsv( $handle, null, ";" );
$data = [];
foreach ( $fileData as $value ) {
$values = explode("#", $value, 2);
if ( count($values) == 2 ) {
$data[ $values[0] ] = $values[1];
}
}
print_r($data);
}
fclose($handle);
Вывод будет выглядеть примерно так ...
Array
(
[100] => Alfred
[101] => Mueller
[102] => Exampplestreet 1
[103] => 12121
[104] => Chicago
)
Если вам не нужен тип поля и всегда следуют три символа на #
вы можете сделать это короче, обновив значение массива чтения, используя substr()
, чтобы всегда удалять первые 4 символа ..
while ( !feof($handle) ) {
$data = fgetcsv( $handle, null, ";" );
foreach ( $data as &$value ) {
$value = substr($value, 4);
}
print_r($data);
}
Это, очевидно, будет медленнее, чем его загрузка напрямую (и вам нужно добавить вызовы базы данных к вышеприведенному).