WedX - журнал о программировании и компьютерных науках

Сортировка данных CSV через массив PHP

Я пытаюсь получить данные из .CSV , отсортировать их в массиве (используя PHP), выбрать в нем определенные значения, создать новый массив для этого выбора и закодировать его в объект json, который можно использовать с ajax.

С помощью этого кода я могу получить почти то, что хочу.

$CSV_url = '../fichier-csv/commande.csv';                 // CSV file 
$csv["data"] = array_map('str_getcsv', file($CSV_url));   // to PHP array
array_shift($csv["data"]);                                // remove first line (headers)
$jsonData = json_encode($csv);                            // to Json

Файл CSV содержит около 16 категорий данных в строке, но мне нужно только 4 из них в моем окончательном json.

Я застрял с этим результатом. Если я печатаю до json_encode ($csv), я получаю хороший массив, но у меня возникают проблемы с выбором нужных данных и созданием нового массива с ним (именно так, я думаю, это должно быть сделано, но я новичок, может есть более простой способ) Выведенный Json также должен быть отсортирован в порядке возрастания значения [0] каждого массива. Вот начало массивов, которые я получаю (378 из них для обработки):

Array (
    [data] => Array
        (
            [0] => Array
                (
                    [0] => 100120148
                    [1] => 1.0000
                    [2] => 7.4200
                    [3] => 2.4700
                    [4] => 4.9100
                    [5] => 0.0000
                    [6] => 14.8000
                    [7] => 0.3000
                    [8] => marie
                    [9] => jardin
                    [10] => 40 rue mazé
                    [11] => 87400
                    [12] => 066825197
                    [13] => [email protected]
                    [14] => 1
                    [15] => [email protected]
                )

            [1] => Array
                (
                    [0] => 100120162
                    [1] => 1.0000
                    [2] => 45.7500
                    [3] => 10.8000
                    [4] => 8.2500
                    [5] => 0.0000
                    [6] => 64.8000
                    [7] => 2.0000
                    [8] => __
                    [9] => Lucien fizon
                    [10] => 56 impasse pazarre
                    [11] => 25000
                    [12] => 0649851473
                    [13] => [email protected]
                    [14] => 4
                    [15] => [email protected]
                )

Как мне получить значения 0, 8, 9 и 12 каждого подмассива и создать с ним новый массив, чтобы я мог кодировать этот желаемый массив в Json?

Спасибо.

22.03.2020

Ответы:


1

Возможно, будет лучше обрабатывать его по мере чтения файла, используя fopen() и fgetcsv(), вы можете извлекать только те элементы, которые хотите получить в результате, а не сохранять их все.

$CSV_url = '../fichier-csv/commande.csv';
$fh = fopen($CSV_url, "r");
$csv = [ "data" => [] ];
fgets($fh);             // Ignore header
while ( $row = fgetcsv($fh) )   {
    $csv["data"][] = [$row[0], $row[8], $row[9], $row[12]];
}
fclose($fh);
$jsonData = json_encode($csv);
22.03.2020
  • Большое спасибо @Nigel Ren! Я так много времени с носом трачу на решение... Если не слишком много спросить, Можете ли вы иметь представление о том, как отсортировать полученный массив PHP по значению строки [0]; в порядке возрастания (от меньшего значения к большему значению)? 22.03.2020
  • Вы можете уйти, используя sort( $csv['data'] ); 22.03.2020
  • Я думал, что для такой сортировки потребуется больше параметров, сортировка справилась со своей задачей. Я искал array_multisort, так как считал необходимым указать строку, используемую для сортировки массива. С другой стороны, большое спасибо @Nigel ren! 22.03.2020

  • 2

    Вы можете снова использовать array_map, чтобы выбрать только нужные столбцы в каждой строке:

    $csv["data"] = array_map(fn($row) => [$row[0], $row[8], $row[9], $row[12]], $csv["data"]);
    

    Если вы еще не используете PHP 7.4, вам нужно будет использовать традиционный синтаксис вместо стрелочной функции:

    $csv["data"] = array_map(function(row) {
        return [$row[0], $row[8], $row[9], $row[12]];
    }, $csv["data"];
    
    22.03.2020
  • Приятно иметь еще один подход к тестированию, спасибо! Il работал хорошо с несколькими правками (в PHP 7.3.12): › $csv["data"] = array_map(function($row) { > return [$row[0], $row[8], $row[9], $row[12]]; > }, $csv["data"]); > sort ($csv["data"]); > $jsonData = json_encode($csv); 22.03.2020
  • Новые материалы

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]