如何将此数组转换为可用变量?收到“通知:未定义”

时间:2018-10-01 17:37:58

标签: php arrays variables

我正在尝试使以下数组转储作为定义的变量工作。我的术语可能很糟糕,所以如果我没有正确解释,请告诉我。

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 (
          ),

我正在尝试使用“ for each”进行类似以下操作

$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 :(得分:2)

由于数组中还有一个@attributes元素,因此当您遍历整个数组并假定它们都具有$data['items']['client'][0]['name']元素时,这将无法正常工作。

您可以改用$array['items']元素为起点,这样就可以更好地匹配您之后的数据...

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

OR

您可以使用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>元素(就像访问数组一样访问多个元素)。