Странная проблема с чтением значения из ассоциативного массива в PHP 7.1

Я вижу странную проблему с некоторым (должно быть простым) кодом PHP в базовом скрипте.

У меня есть многомерный ассоциативный массив $ accounts, который при использовании var_dump выглядит так:

    Array(4) {
      [0] =>
      array(3) {
        'account' =>
        string(37) "Flood Cleanup City - Desktop - Exact "
        'parameter' =>
        string(23) "flood_cleanup_city_d_em"
        'phone' =>
        string(0) ""
      }
      [1] =>
      array(3) {
        'account' =>
        string(51) "Flood Cleanup City - Desktop - Exact Call Extension"
        'parameter' =>
        string(3) "N/A"
        'phone' =>
        string(0) ""
      }
      [2] =>
      array(3) {
        'account' =>
        string(38) "Flood Cleanup City - Desktop - Phrase "
        'parameter' =>
        string(23) "flood_cleanup_city_d_pm"
        'phone' =>
        string(0) ""
      }
      [3] =>
      array(3) {
        'account' =>
        string(52) "Flood Cleanup City - Desktop - Phrase Call Extension"
        'parameter' =>
        string(3) "N/A"
        'phone' =>
        string(0) ""}
}

Итак, достаточно просто. Этот массив создается в функции и передается в качестве возвращаемого значения переменной $ listAccounts.

Я просто хочу перебрать $ listAccounts и извлечь значение account, поэтому написал следующее:

foreach($listAccount as $account)
{
    $accountName = $account['account'];
    echo $accountName;
}

Я ожидал, что он выведет четыре строки учетной записи. Вместо этого $ account ['account'] возвращает NULL. НО, если я использую функцию array_keys для извлечения имен ключей из массива и использую этот код, он работает правильно:

$accountName = $account[array_keys($account)[0]];

В случае, если это может быть актуально, функция, которая генерирует многомерный массив, использует функцию fgetcsv () для анализа файла CSV:

function getAccounts()
{
    $handle = fopen("water.csv","r");
    $header = NULL;
    $accounts = array();
    $n = 0;
    while (!feof($handle)) {
        $account = fgetcsv($handle);
        if (!$header)
        {
            $header = $account;
        }
        else
        {
            $accounts[] = array_combine($header,$account);
        }
    }
    fclose($handle);
    echo var_dump($accounts);
    return $accounts;
}

Возможно, вы не думаете, что дублирующая ссылка связана, но она напрямую связана как toor, так и ускользнула. У вас есть спецификация в этом файле, который читается с первым полем заголовка в fgetcsv. И вам нужно избавиться от него перед синтаксическим анализом csv.

IncredibleHat 09.03.2018 16:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
1
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас есть странный первый невидимый символ в названии ключа "аккаунт". Отфильтруйте данные после анализа файла CSV.

Шестнадцатеричный код этого символа: efbbbf ..., который является спецификацией (метка порядка байтов). Если это вообще возможно, лучше сохранить .csv без него. Но если вы не можете, то снимите это с передней части файла перед синтаксическим анализом (так как обрезка не будет легко избавиться).

IncredibleHat 09.03.2018 16:28

Спасибо вам обоим! Вот и все. Я использую PhpStorm и могу использовать опцию «Удалить спецификацию» в CSV-файле прямо из среды IDE. Спасибо!

Joe 09.03.2018 18:56

Другие вопросы по теме