Как мне превратить этот массив в используемые переменные?Получение "Уведомление: Не определено" - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь заставить следующий дамп массива работать как определенные переменные.Моя терминология, вероятно, ужасна, поэтому дайте мне знать, если я не объясняю это правильно.

array (
  '@attributes' => 
  array (
    'created' => '2018-09-26T15:56:15-05:00',
    'host' => 'www.exampledomain.com',
    'status' => 'OK',
  ),
  'items' => 
  array (
    'client' => 
    array (
      0 => 
      array (
        'clientid' => '368577',
        'name' => 'Cool Company Name',
        'site' => 
        array (
          'siteid' => '567988',
          'name' => 'Cool Company Location',
          'workstations' => 
          array (
          ),

Я пытаюсь сделать что-то вроде следующего с 'для каждого'

$array = simplexml_load_file('rmm.xml', null, LIBXML_NOCDATA);

foreach($array as $data) {
    $name = $data['items']['client'][0]['name'];
    echo "$name";
}

Желаемый результат: Классное название компании

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

Решено!Следующий код решил мою проблему

$xml = simplexml_load_file('rmm.xml', null, LIBXML_NOCDATA);

foreach($xml->items->client as $data) {
    $name = (string)$data->name;
    echo $name;
}

1 Ответ

0 голосов
/ 01 октября 2018

Поскольку в вашем массиве также есть элемент @attributes, когда вы выполняете итерацию по всему массиву и предполагаете, что все они имеют $data['items']['client'][0]['name'] элементов, это не сработает.

Вместо этого вы могли бы основать свойначальная точка вокруг элемента $array['items'], так что у него будет больше шансов сопоставить данные после ...

foreach($array['items'] as $data) {
    $name = $data['client'][0]['name'];
    echo $name;
}

ИЛИ

, а не преобразовывать их в массив.может читать данные более напрямую, используя SimpleXML.Не совсем уверен в структуре, но что-то вроде ...

$xml = simplexml_load_file('rmm.xml', null, LIBXML_NOCDATA);

foreach($xml->items as $data) {
    $name = (string)$data->client[0]->name;
    echo $name;
}

Вы можете видеть, как вместо использования записи массива SimpleXML использует запись объекта для доступа к уровням элементов в документе.Бит client[0] говорит об использовании первого элемента <client> (доступ к элементам с кратным числом, как если бы они были массивом).

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