PHP print_r 显示从 CSV 文件展开的关联数组的内容,但 echo 无法访问其中的单个值

PHP print_r shows contents of associative array exploded from CSV file, but echo can't access individual values in it

我有一个 CSV 文件,可以使一些 MySQL 变量 reader 友好,其中行中的第一项是 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,但它只创建了一个由逗号分隔的项目组成的数组,或与此类似的数组,当我尝试回显每个项目时最终什么都不打印。

我用谷歌搜索过,我在 Whosebug 上阅读了数十个答案,包括页面建议的问题。我已经做了几个小时了,我已经准备好拔头发了。我已经阅读了教程,我已经尝试创建一个简单的关联数组并回显它以确保我做对了(我是),这一切都回到了一个答案:这应该工作,但事实并非如此。有什么想法吗?

您可以通过两种方式访问​​数据,使用字段名称或用户友好的版本。

此代码读取文件并在读取文件时创建两个数组。 $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);