У меня проблема с ассоциативным массивом в 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;
@cale_b я обновляю вопрос.
@ script47 я получил это, когда я гуглил вопрос, прежде чем задавать здесь, но я задаю его, потому что я не понимал там примеров (не тот эксперт по php, но хочу когда-нибудь им стать).
Что вы получите, если добавите var_dump($line_of_text);
сразу после $line_of_text = fgetcsv($file_handle, 1024);
?
у вас почти все хорошо .. просто отредактируйте эту строчку $logins = array($line_of_text[0] . '=>' . $line_of_text[1]);
на $logins[$line_of_text[0]] = $line_of_text[1];
Вот что я думаю ты хочешь
$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);
Чтобы помочь, было бы полезно увидеть пример (1) фактического CSV, который вы открываете, и (2) ожидаемого / желаемого результата. Если
data.txt
, которым вы поделились выше это строковое представление массива, то это никогда не сработает (обратите внимание, что вы на самом деле не открываетеdata.txt
в своем коде, вы открываетеdata.csv
)