Tôi có một tệp csv đã tải lên và tôi cần xác định có bao nhiêu mục trong tệp csv và định dạng các cột đầu tiên, giữa và cuối cùng thành các mảng kết hợp với các cặp $header=>$value. Tôi có mã định dạng toàn bộ csv thành một mảng
hàm csv_to_array($filename='', $delimiter=',') {
if(!file_exists($filename) || !is_readable($filename)){
trả về SAI;
}
tiêu đề $ = NULL;
$data = mảng();
if (($handle = fopen($filename, 'r')) !== FALSE) {
while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
if(!$header) {
$tiêu đề = $hàng;
}khác{
$data[] = array_combine($header, $row);
}
}
fclose($xử lý);
}
trả về dữ liệu $;
}
Tuy nhiên, tôi vẫn bối rối không biết làm cách nào để thực hiện việc này. Bất kỳ trợ giúp sẽ được đánh giá rất cao. Tôi nghĩ một điều có thể xảy ra là sử dụng hàm này ở trên để lấy mảng rồi viết một số hàm khác để chỉ lấy phần đầu và phần cuối của mảng này và kết xuất phần còn lại (nhưng vẫn cần biết cách thực hiện điều đó) Như chắc chắn đầu giữa cuối
Tôi sẽ giải quyết nó trong khi bạn đọc tập tin.
// tổng cộng có bao nhiêu cột
$tổng = đếm( $row );
// lấy nửa điểm (và làm tròn lên nếu là số thập phân)
$middle = ceil($total/2 );
// Tạo một hàng mới sử dụng hàng đầu tiên (0), hàng cuối ($total-1) và hàng giữa ($middle)
$new_row = mảng( $row[0], $row[ $middle ], $row[ $total-1 ] );
Nhúng vào mã của bạn:
hàm csv_to_array($filename='', $delimiter=',') {
if(!file_exists($filename) || !is_readable($filename)){
trả về SAI;
}
tiêu đề $ = NULL;
$data = mảng();
if (($handle = fopen($filename, 'r')) !== FALSE) {
while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
$tổng = đếm( $row );
$middle = ceil($total/2 );
$new_row = mảng( $row[0], $row[ $middle ], $row[ $total-1 ] );
if(!$header) {
$header = $new_row;
}khác{
$data[] = array_combine($header, $new_row);
}
}
fclose($xử lý);
}
trả về dữ liệu $;
}
Bạn có thể tiết kiệm sức mạnh xử lý bằng cách giả sử rằng mọi hàng trong toàn bộ tệp đều có cùng số cột. Nếu vậy thì bạn chỉ cần tính toán một lần như sau:
hàm csv_to_array($filename='', $delimiter=',') {
if(!file_exists($filename) || !is_readable($filename)){
trả về SAI;
}
tiêu đề $ = NULL;
$data = mảng();
if (($handle = fopen($filename, 'r')) !== FALSE) {
while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
if ( !$total ){ // Xác minh xem chúng ta đã có tổng chưa, còn nếu chưa:
$tổng = đếm( $row );
$middle = ceil($total/2 );
}
$new_row = mảng( $row[0], $row[ $middle ], $row[ $total-1 ] );
if(!$header) {
$header = $new_row;
}khác{
$data[] = array_combine($header, $new_row);
}
}
fclose($xử lý);
}
trả về dữ liệu $;
}
Tôi là một lập trình viên xuất sắc, rất giỏi!