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);
我有一个 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);