PHP csv_to_array & array_combine - PullRequest
       54

PHP csv_to_array & array_combine

0 голосов
/ 28 апреля 2020

Я не могу вспомнить, где я нашел эту функцию csv_to_array, но я использовал ее без проблем до недавнего времени.

function csv_to_array($filename, $delimiter=',', $enclosure='"', $escape = '\\') {

    if(!file_exists($filename) AND !is_readable($filename)) {echo "File does not exist or is not readable."; return false;}

    $header = null;
    $values = array();
    $data = array();
    $lines = file($filename);

    foreach($lines as $line) {
        $values = str_getcsv($line, $delimiter, $enclosure, $escape);
        $values = array_map('trim', $values);
        if(!$header) {$header = $values;
        var_dump($header);
        echo "<br><br>";
        var_dump($values);
        echo "<br><br>";
        }
        else $data[] = array_combine($header, $values);
    }

    return $data;
}

Теперь я получаю "array_combine (): оба параметра должны иметь ошибка равного числа элементов, но я не могу понять, как строки одного и того же CSV имеют разное количество столбцов. Несколько столбцов содержат достаточное количество текста, включая запятые, и я отформатировал эти столбцы как TEXT, чтобы они заключали в них кавычки, а я взял CSV, переименовал его в TXT-файл и импортировал обратно в Excel, и все строки выглядят иметь правильное количество столбцов. Если бы они этого не сделали, это было бы очевидно, так как данные в столбцах подпрыгивают.

Я заметил в файле, что двойные кавычки в столбцах TEXT экранируются еще одной двойной кавычкой. В функции говорится, что escape - \, поэтому я выполнил поиск и заменил ""> \ ", но это не имело никакого эффекта.

Раздел var_dump выплевывает две строки массива. Я перешел к строке 45 в CSV и не вижу ничего необычного.

array(46) { [0]=> string(6) "PartNo" [1]=> string(7) "Company" [2]=> string(6) "Status" [3]=> string(10) "DateEdited" [4]=> string(8) "Comments" [5]=> string(6) "Photos" [6]=> string(11) "VehicleType" [7]=> string(4) "Make" [8]=> string(5) "Model" [9]=> string(9) "BodyStyle" [10]=> string(9) "Driveline" [11]=> string(10) "LiftHeight" [12]=> string(7) "MaxTire" [13]=> string(9) "YearStart" [14]=> string(7) "YearEnd" [15]=> string(9) "Trademark" [16]=> string(6) "Series" [17]=> string(8) "Category" [18]=> string(11) "SubCategory" [19]=> string(12) "3SubCategory" [20]=> string(18) "AssociatedComments" [21]=> string(8) "Max 2000" [22]=> string(11) "Application" [23]=> string(8) "Max 2000" [24]=> string(11) "Daystar App" [25]=> string(12) "ExtendedDesc" [26]=> string(7) "Max 240" [27]=> string(13) "MarketingDesc" [28]=> string(8) "Max 2000" [29]=> string(16) "FeaturesBenefits" [30]=> string(3) "MAP" [31]=> string(4) "MSRP" [32]=> string(14) "PriceEffective" [33]=> string(11) "DateUpdated" [34]=> string(3) "UPC" [35]=> string(9) "BoxLength" [36]=> string(8) "BoxWidth" [37]=> string(9) "BoxHeight" [38]=> string(9) "BoxWeight" [39]=> string(5) "Color" [40]=> string(7) "Country" [41]=> string(6) "Carded" [42]=> string(9) "ScheduleB" [43]=> string(0) "" [44]=> string(14) "In Development" [45]=> string(12) "Discontinued" }

array(46) { [0]=> string(6) "PartNo" [1]=> string(7) "Company" [2]=> string(6) "Status" [3]=> string(10) "DateEdited" [4]=> string(8) "Comments" [5]=> string(6) "Photos" [6]=> string(11) "VehicleType" [7]=> string(4) "Make" [8]=> string(5) "Model" [9]=> string(9) "BodyStyle" [10]=> string(9) "Driveline" [11]=> string(10) "LiftHeight" [12]=> string(7) "MaxTire" [13]=> string(9) "YearStart" [14]=> string(7) "YearEnd" [15]=> string(9) "Trademark" [16]=> string(6) "Series" [17]=> string(8) "Category" [18]=> string(11) "SubCategory" [19]=> string(12) "3SubCategory" [20]=> string(18) "AssociatedComments" [21]=> string(8) "Max 2000" [22]=> string(11) "Application" [23]=> string(8) "Max 2000" [24]=> string(11) "Daystar App" [25]=> string(12) "ExtendedDesc" [26]=> string(7) "Max 240" [27]=> string(13) "MarketingDesc" [28]=> string(8) "Max 2000" [29]=> string(16) "FeaturesBenefits" [30]=> string(3) "MAP" [31]=> string(4) "MSRP" [32]=> string(14) "PriceEffective" [33]=> string(11) "DateUpdated" [34]=> string(3) "UPC" [35]=> string(9) "BoxLength" [36]=> string(8) "BoxWidth" [37]=> string(9) "BoxHeight" [38]=> string(9) "BoxWeight" [39]=> string(5) "Color" [40]=> string(7) "Country" [41]=> string(6) "Carded" [42]=> string(9) "ScheduleB" [43]=> string(0) "" [44]=> string(14) "In Development" [45]=> string(12) "Discontinued" }

Когда я заменяю CSV, я работаю с CSV, который я использовал в последний раз, я не получаю ошибку array_combine. CSV аналогичны много разных данных.

Я в недоумении, как я могу это выяснить.

Есть мысли?

Спасибо, Майк

...