Ассоциативный массив в PHP из файла CSV / TXT

У меня проблема с ассоциативным массивом в PHP - когда источник массивов из текстового файла.

Когда я пишу что-то такое:

$logins = array('user1' => '1234','user2' => '2345','user3' => '3456');

Все работает как положено.

Итак, я попытался вызвать эти массивы из файла CSV следующим образом:

$file_handle = fopen("data.csv", "r");
while (!feof($file_handle) ) {
  $line_of_text = fgetcsv($file_handle, 1024);
  if (empty($line_of_text)) { break; }
  $logins = array($line_of_text[0] . '=>' . $line_of_text[1]); /* remove the => and seperate the logins with "," on CSV */
}

Это не сработало.

Здесь, по SO, есть много близких связанных вопросов и ответов, но я читал и безуспешно пытался их имплантировать. Пожалуйста, направь меня.

Обновлено: data.csv выглядит следующим образом.

user1,1234;
user2,2345;
user3,3456;

Чтобы помочь, было бы полезно увидеть пример (1) фактического CSV, который вы открываете, и (2) ожидаемого / желаемого результата. Если data.txt, которым вы поделились выше это строковое представление массива, то это никогда не сработает (обратите внимание, что вы на самом деле не открываете data.txt в своем коде, вы открываете data.csv)

random_user_name 25.10.2018 17:13

@cale_b я обновляю вопрос.

A. Meshu 25.10.2018 17:26

@ script47 я получил это, когда я гуглил вопрос, прежде чем задавать здесь, но я задаю его, потому что я не понимал там примеров (не тот эксперт по php, но хочу когда-нибудь им стать).

A. Meshu 25.10.2018 17:26

Что вы получите, если добавите var_dump($line_of_text); сразу после $line_of_text = fgetcsv($file_handle, 1024);?

random_user_name 25.10.2018 17:34

у вас почти все хорошо .. просто отредактируйте эту строчку $logins = array($line_of_text[0] . '=>' . $line_of_text[1]); на $logins[$line_of_text[0]] = $line_of_text[1];

Arbaz Khan 25.10.2018 17:49
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
6
149
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вот что я думаю ты хочешь

$logins = array();
$file_handle = fopen("data.csv", "r");
while (!feof($file_handle) ) {
  $line_of_text = fgetcsv($file_handle, 1024);
  // At this point, $line_of_text is an array, which will look
  // something like this: {[0]=>'user1',[1]=>'1234'}
  if (empty($line_of_text)) { break; }
  $logins[$line_of_text[0]] = $line_of_text[1];
  // So the line above is equivalent to something like
  // $logins['user1'] = '1234';
}

Это, вероятно, также сработает, хотя я думаю, что это не то, чем вы действительно хотите заниматься.

/* $dataFile = fopen("data.txt", "r"); */
$dataFile = file_get_contents("data.txt");
/* logins = array($dataFile); */
eval('$logins = ' . $dataFile . ';');
Ответ принят как подходящий

Вы можете избежать этих циклов, условных выражений и беспорядка fopen() / fclose():

<?php
// read the file into an array
$arr = file("data.csv", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

// split each line at the comma
array_walk($arr, function(&$v, $k){$v=explode(",", $v);});

// build an array from the data
$keys = array_column($arr, 0);
$values = array_column($arr, 1);
$logins = array_combine($keys, $values);

Другие вопросы по теме