PHP声明定义的数组索引未定义

PHP声明定义的数组索引未定义,php,arrays,Php,Arrays,我有一个脚本声称我的一些数组索引没有定义,我就是不明白为什么 下面是一个最小的测试用例: <?php // Define the two-dimensional array $lg = [ "aapg-datapages" => [ "lgid" => "3148425", "lgname" => "AAPG Datapages", ], "abstracts-of-international-conservat

我有一个脚本声称我的一些数组索引没有定义,我就是不明白为什么

下面是一个最小的测试用例:

<?php

// Define the two-dimensional array
$lg = [
    "aapg-datapages" => [
        "lgid" => "3148425",
        "lgname" => "AAPG Datapages",
    ],
    "abstracts-of-international-conservation-literature" => [
        "lgid" => "3148426",
        "lgname" => "AATA online: Abstracts of International Conservation Literature",
    ],
    "academic-search-complete" => [
        "lgid" => "48083863",
        "lgname" => "Academic Search Complete",
    ],
];

// Dump just the first entry.
var_dump($lg['aapg-datapages']);

print "\n";

// Print the ID of the first entry.
print $lg['aapg-datapages']['lgid'];

print "\n";

// Print out all the names.
foreach($lg as $db => $properties){
    print $properties['lgname']."\n";
}

print "\n";

// Print out all the IDs.
foreach($lg as $db => $properties){
    print $properties['lgid']."\n";
}
我已经为此挣扎了好几个小时了。当我在数组中转储一个条目时,它会同时看到lgid和lgname。但是,如果我尝试访问lgid,它会抛出一个未定义的索引错误,即使它可以使用完全相同的代码获得lgname

是的,这是一个多维数组,但我很确定我没有指向数组的错误级别

我想,我曾尝试将lgid重命名为其他glerp,但没有效果。我认为PHP并不关心您使用哪种约定作为行尾,但为了以防万一,我尝试了\n和\r\n

我在两个不同的环境中尝试过它:Ubuntu 18.04.4上的PHP7.2.24和Red Hat Enterprise Linux 7.8 Maipo上的PHP7.3.17,在这两个环境中都有相同的结果

在某一点上,我的测试数组中的第一个条目开始工作,而另外两个条目继续读取为未定义。不幸的是,我不知道我是怎么做到的。这三个条目在我的测试文件中看起来完全相同,只是其中一个有效,另外两个无效


我错过了什么明显的东西吗?我是否在PHP中引发了一些奇怪的bug?我只是不知道还能尝试什么。

你似乎有一些看不见的角色:

$lg = [
    "aapg-datapages" => [
        "<feff>lgid" => "3148425",
        "lgname" => "AAPG Datapages",
    ],
    "abstracts-of-international-conservation-literature" => [
        "<feff>lgid" => "3148426",
        "lgname" => "AATA online: Abstracts of International Conservation Literature",
    ],
    "academic-search-complete" => [
        "<feff>lgid" => "48083863",
        "lgname" => "Academic Search Complete",
    ],
];

作为输出

该死的费夫。UTF-16 BOM的剩余部分可能来自windows unicode文件。很好的发现。哦,看在爱的份上。。。啊。我从中提取这些记录的API必须在东西上粘贴字节顺序标记。多痛苦啊。我甚至知道这些,以前也遇到过——它们通常出现在文件的开头,而不是混合到数据中。非常感谢你!
$lg = [
    "aapg-datapages" => [
        "<feff>lgid" => "3148425",
        "lgname" => "AAPG Datapages",
    ],
    "abstracts-of-international-conservation-literature" => [
        "<feff>lgid" => "3148426",
        "lgname" => "AATA online: Abstracts of International Conservation Literature",
    ],
    "academic-search-complete" => [
        "<feff>lgid" => "48083863",
        "lgname" => "Academic Search Complete",
    ],
];
array(2) {
  ["lgid"]=>
  string(7) "3148425"
  ["lgname"]=>
  string(14) "AAPG Datapages"
}

3148425
AAPG Datapages
AATA online: Abstracts of International Conservation Literature
Academic Search Complete

3148425
3148426
48083863