将嵌套DOMNode的值存储在PHP数组中

时间:2014-04-18 23:25:25

标签: php xpath domxpath dom-node

我有以下html结构:

<span class="1">
    <span class="name">
    </span>
    <span class="books">
        <span class="english">
        </span>
        <span class="english">
        </span>
    </span>
</span>
<span class="2">
    <span class="name">
    </span>
    <span class="books">
        <span class="english">
        </span>
        <span class="english">
        </span>
    </span>
</span>
...

我正在使用以下函数来检索它:

$oDomObject = $oDomXpath->query("//span[number(@class)=number(@class)]");

如何将值存储在保持嵌套顺序的PHP数组中?

foreach ($oDomObject as $oObject) {
    ..*SOMETHING*..
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:-1)

您需要构建一个类似于以下内容的递归函数。

警告:未经测试,可能需要进行一些调整。但这应该把你的头放在正确的位置。

foreach ($oDomObject as $oObject) {
  $myArray[] = getChildren($oObject);
}

function getChildren($nodeObj) {
  retArray = array();
  if($nodeObj->hasChildren()) {
    $retArray[] = getChildren($nodeObj);
  } else {
    $retArray[] = $nodeObj->nodeValue;
  }
  return $retArray;
}

它的作用:如果它遇到没有子节点的节点,它会将值附加到数组。如果没有,它会将子数值的数组附加到数组中。这种情况发生在令人作呕的情况下,并且尽可能地让您头脑发热。

要考虑的事情:

  1. 我希望我的数组在完成时看起来像是什么样的,因为在某些深度的情况下,这会非常荒谬而且非常烦人。

  2. 为什么我要附加到一个数组,我可能会再次循环,而不是立即处理所需的操作?