function simple_html_dom_node::find in simplehtmldom API 5.2
Same name and namespace in other branches
- 6 simplehtmldom/simple_html_dom.php \simple_html_dom_node::find()
- 7 simplehtmldom/simple_html_dom.php \simple_html_dom_node::find()
4 calls to simple_html_dom_node::find()
- simple_html_dom_node::getElementById in simplehtmldom/
simple_html_dom.php - simple_html_dom_node::getElementByTagName in simplehtmldom/
simple_html_dom.php - simple_html_dom_node::getElementsById in simplehtmldom/
simple_html_dom.php - simple_html_dom_node::getElementsByTagName in simplehtmldom/
simple_html_dom.php
File
- simplehtmldom/
simple_html_dom.php, line 261
Class
Code
function find($selector, $idx = null) {
$selectors = $this
->parse_selector($selector);
if (($count = count($selectors)) === 0) {
return array();
}
$found_keys = array();
// find each selector
for ($c = 0; $c < $count; ++$c) {
if (($levle = count($selectors[0])) === 0) {
return array();
}
if (!isset($this->_[HDOM_INFO_BEGIN])) {
return array();
}
$head = array(
$this->_[HDOM_INFO_BEGIN] => 1,
);
// handle descendant selectors, no recursive!
for ($l = 0; $l < $levle; ++$l) {
$ret = array();
foreach ($head as $k => $v) {
$n = $k === -1 ? $this->dom->root : $this->dom->nodes[$k];
$n
->seek($selectors[$c][$l], $ret);
}
$head = $ret;
}
foreach ($head as $k => $v) {
if (!isset($found_keys[$k])) {
$found_keys[$k] = 1;
}
}
}
// sort keys
ksort($found_keys);
$found = array();
foreach ($found_keys as $k => $v) {
$found[] = $this->dom->nodes[$k];
}
// return nth-element or array
if (is_null($idx)) {
return $found;
}
else {
if ($idx < 0) {
$idx = count($found) + $idx;
}
}
return isset($found[$idx]) ? $found[$idx] : null;
}