<?php
/**
* Parses data from datasets with optional flags.
*
* @param string $dataset_path Path to the dataset file.
* @param array $options An array of optional parameters.
* - 'delimiter' : Delimiter used in the dataset (default: ',').
* - 'header' : Whether the dataset has a header row (default: true).
* - 'skip_rows' : Number of rows to skip at the beginning (default: 0).
* - 'data_type' : Data type of the columns ('string', 'int', 'float'). Default: 'string'.
*
* @return array|false An array of data rows, or false on error.
*/
function parseDataset(string $dataset_path, array $options = []): array|false
{
// Default options
$delimiter = $options['delimiter'] ?? ',';
$header = $options['header'] ?? true;
$skip_rows = $options['skip_rows'] ?? 0;
$data_type = $options['data_type'] ?? 'string';
// Validate data type
if (!in_array($data_type, ['string', 'int', 'float'])) {
error_log("Invalid data_type. Must be string, int, or float.");
return false;
}
$data = [];
// Open the file
if (($handle = fopen($dataset_path, 'r')) === false) {
error_log("Could not open file: " . $dataset_path);
return false;
}
// Skip header rows
if ($header) {
fgetcsv($handle, 0, $delimiter); // Skip header row
}
// Skip specified rows
for ($i = 0; $i < $skip_rows; $i++) {
fgetcsv($handle, 0, $delimiter);
}
// Read data rows
while (($row = fgetcsv($handle, 0, $delimiter)) !== false) {
// Convert data types
$typed_row = [];
foreach ($row as $value) {
if ($data_type == 'int' && is_numeric($value)) {
$typed_row[] = (int) $value;
} elseif ($data_type == 'float' && is_numeric($value)) {
$typed_row[] = (float) $value;
} else {
$typed_row[] = $value;
}
}
$data[] = $typed_row;
}
fclose($handle);
return $data;
}
?>
Add your comment