【发布时间】:2020-06-24 17:23:32
【问题描述】:
我有一个 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]; }
当我在 $assoc 数组上执行 print_r 时,它给了我所希望的一切。从源代码来看:
Array
(
[Hymn1] => First Hymn
[Hymn2] => Second Hymn
[date] => Date
[C2W] => Call to Worship
)
但是 - 这就是问题所在 - 当我尝试使用 echo $assoc['Hymn1']; 或 echo $assoc->Hymn1; 访问数组中的单个元素时,我什么也没得到。我可以回显“Hello World”,它会显示出来,但没有任何效果。
我也尝试过 str_getcsv,但它只创建了一个由每个逗号分隔的项目组成的数组,或者与这个类似的数组,当我尝试回显每个项目时最终什么都不打印。
我用谷歌搜索过,我在 StackOverflow 上阅读了几十个答案,包括页面建议的问题。我已经在这工作了好几个小时了,我已经准备好把我的头发拉出来了。我已经阅读了教程,我尝试创建一个简单的关联数组并对其进行回显以确保我做对了(我是),这一切都导致了一个答案:这应该有效,但它没有。有什么想法吗?
【问题讨论】:
标签: php arrays csv associative-array