У меня есть файл CSV, чтобы сделать некоторые переменные MySQL удобными для чтения, где первый элемент в строке - это имя поля MySQL, а второй - удобное для пользователя имя, которое нужно заполнить в поле, например:
Hymn1,First Hymn,
Hymn2,Second Hymn,
date,Date,
C2W,Call To Worship,
Затем я создам отдельные списки, чтобы люди в церкви могли вводить релевантные для них данные - музыкальный директор будет вводить имена, авторов и тексты гимна, предложений и т.п. Я заполню этот список именами переменных MySQL и сгенерирую из них страницу.
Я хочу преобразовать этот CSV в массив, чтобы я мог сгенерировать страницу, которая будет отображать имена полей удобочитаемыми способами для меток полей.
Я думаю, что отчасти моя проблема в том, что у меня есть CSV-файл сбоку. В большинстве ответов предполагается, что первая строка - это имя поля, а остальные - это содержимое, но здесь это не так.
Если бы это был Python, я бы просто заархивировал их в словарь, но в PHP, очевидно, вы используете ассоциативные массивы.
Я открыл CSV и поместил результаты в строку с именем $keys
и повторил строку, чтобы убедиться, что она отображается, как указано выше, что так и есть.
Затем я объявил массив, избавился от новой строки и заменил его второй запятой, а затем заменил вторую запятую на вертикальную черту:
$assoc = array();
$keys = str_replace("\r", ",", $keys);
$keys = str_replace(",,", "|", $keys);
После этого я превратил строку $ keys в новую переменную с вертикальной чертой в качестве разделителя. Все идет нормально.
$newvar = explode("|", $keys);
Наконец, я взорвал каждый из разделенных запятыми элементов в каждом ключе массива и связал их друг с другом в цикле foreach.
foreach($newvar as $iterator) {
$mini = explode(",", $iterator);
$mini[0] = ltrim($mini[0], "\n");
$assoc[$mini[0]] = $mini[1]; }
Когда я выполнил print_r
в своем массиве $assoc
, он дал мне все, на что я надеялся. Из исходного кода:
Array
(
[Hymn1] => First Hymn
[Hymn2] => Second Hymn
[date] => Date
[C2W] => Call to Worship
)
Но - и это проблема - когда я пытался получить доступ к отдельным элементам в массиве с помощью echo $assoc['Hymn1'];
или echo $assoc->Hymn1;
, я ничего не получил. Я мог повторить "Hello World", и он бы появился, но ничего из этого.
Я также пробовал str_getcsv, но он создает только массив каждого элемента, разделенного запятыми, или массив, аналогичный этому, который в конечном итоге ничего не печатает, когда я пытаюсь повторить каждый элемент.
Я погуглил, я прочитал десятки ответов на StackOverflow, включая вопросы, предложенные на странице. Я занимаюсь этим несколько часов и готов выдернуть волосы. Я прочитал учебные пособия, я попытался создать простой ассоциативный массив и повторить его, чтобы убедиться, что я делаю это правильно (я прав), и все это приводит к одному ответу: ЭТО ДОЛЖНО РАБОТАТЬ, но это не так. Есть идеи?
2 ответа
Есть два способа получить доступ к данным: с помощью имени поля или удобной для пользователя версии.
Этот код читает файл и создает два массива при чтении файла. $variables
использует значения Hymn1
в качестве ключей, $names
использует значения First Hymn
в качестве ключей.
$variables = [];
$names= [];
$fh = fopen($fileName, "r");
while ( $row = fgetcsv($fh)) {
$variables [$row[0]] = $row[1];
$names [$row[1]] = $row[0];
}
fclose($fh);
print_r($variables);
print_r($names);
Обычно люди плохо справляются с учебниками, имеющими множество разнообразных примеров . Вам просто нужно предоставить и ключ и значение:
foreach ($newvar as $key1 => $value1)
{
echo '<p>'.$key1.' = '.$value1.'</p>';
}
Похожие вопросы
Новые вопросы
php
PHP — это открытый, мультипарадигмальный, динамически типизированный и интерпретируемый язык сценариев, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.