PHP утверждает, что индекс массива не определен - PullRequest
1 голос
/ 28 апреля 2020

У меня есть скрипт, утверждающий, что некоторые из моих индексов массива не определены, и я просто не могу понять, почему.

Вот минимальный тестовый пример:

<?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";
}

Когда Я запускаю его в командной строке и получаю следующий вывод:

$ php test.php
array(2) {
  ["lgid"]=>
  string(7) "3148425"
  ["lgname"]=>
  string(14) "AAPG Datapages"
}

PHP Notice:  Undefined index: lgid in /var/transfer/work/test.php on line 22

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

PHP Notice:  Undefined index: lgid in /var/transfer/work/test.php on line 31

PHP Notice:  Undefined index: lgid in /var/transfer/work/test.php on line 31

PHP Notice:  Undefined index: lgid in /var/transfer/work/test.php on line 31

Я боролся с этим часами. Когда я var_dump одна запись в массиве, он видит и lgid и lgname. Но если я пытаюсь получить доступ к lgid, он выдает ошибку «неопределенный индекс», даже если он может получить lgname с точно таким же кодом просто отлично.

Да, это многомерный массив, но я уверен, что не указываю на неправильный уровень массива.

Я попытался переименовать lgid во что-то другое (glerp, Я думаю), но это не имело никакого эффекта. Я не думаю, что PHP заботится о том, какое именно соглашение вы используете для окончания строки, но я попробовал \n и \r\n, на всякий случай.

Я пробовал в двух разных средах: PHP 7.2.24 в Ubuntu 18.04.4 () и PHP 7.3.17 в Red Hat Enterprise Linux 7.8 (Maipo) с одинаковыми результатами в обоих случаях.

Однажды первая запись в моем тестовом массиве начала работать, в то время как две другие продолжали читать как неопределенные. К сожалению, я понятия не имею, что я сделал, чтобы это произошло. Три записи оказались идентичными в моем тестовом файле, за исключением того, что одна работала, а две другие не работали.

Я что-то упускаю из виду? Я как-то вызвал какую-то ошибку exoti c в PHP? Я просто не знаю, что еще попробовать.

1 Ответ

4 голосов
/ 28 апреля 2020

У вас, кажется, есть невидимые символы:

$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",
    ],
];

Обратите внимание на <feff>

, который объяснит вашу проблему.

Я использую vim для редактирования, и я их легко вижу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...