如何将哈希表转换为数组


How to convert Hashtable to array

我想将此哈希表转换为数组或对象。 是否有任何可用于将哈希表转换为数组或对象或其他任何内容的 PHP 方法。

<hashtable>
  <entry>
    <string>actiontypedesc</string>
    <string>Deletion of IP Address [148.56.25.133] from Child Nameserver ns4.pankajwelcome.com</string
>
  </entry>
  <entry>
    <string>entityid</string>
    <string>61389936</string>
  </entry>
  <entry>
    <string>actionstatus</string>
    <string>Success</string>
  </entry>
</hashtable>

这看起来很像XML,这就是为什么你可以使用PHP的SimpleXML扩展:

$hash = '<hashtable>
  <entry>
    <string>actiontypedesc</string>
    <string>Deletion of IP Address [148.56.25.133] from Child Nameserver ns4.pankajwelcome.com</string
>
  </entry>
  <entry>
    <string>entityid</string>
    <string>61389936</string>
  </entry>
  <entry>
    <string>actionstatus</string>
    <string>Success</string>
  </entry>
</hashtable>';
$asXML = new SimpleXMLElement($hash);
var_dump($asXML);

这将创建一个对象,您可以轻松访问其字段。

泛型转换不会提供最佳结果。XML是一种数据结构,泛型转换通常会导致信息和功能的丢失。

如果你想把这个特定的数据读到一个简单的数组中,你可以使用 DOM+XPath:

$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);
$array = [];
foreach ($xpath->evaluate('/hashtable/entry') as $entry) {
  $key = $xpath->evaluate('string(string[1])', $entry);
  $value = $xpath->evaluate('string(string[2])', $entry);
  $array[$key] = $value;
}
var_dump($array);

输出:

array(3) {
  ["actiontypedesc"]=>
  string(82) "Deletion of IP Address [148.56.25.133] from Child Nameserver ns4.pankajwelcome.com"
  ["entityid"]=>
  string(8) "61389936"
  ["actionstatus"]=>
  string(7) "Success"
}

/hashtable/entry返回所有entry节点的列表。 string[1]将返回第一个string元素子节点(在列表中(,但该函数string()将其转换为字符串。