FluentDOM\Nodes::unique PHP Метод

unique() публичный Метод

Note that this only works on arrays of DOM nodes, not strings or numbers.
public unique ( array $array ) : array
$array array array of DOM nodes
Результат array
    public function unique(array $array)
    {
        $count = count($array);
        if ($count <= 1) {
            if ($count == 1) {
                Constraints::assertNode(reset($array), 'Array must only contain dom nodes, found "%s".');
            }
            return $array;
        }
        $sortable = array();
        $unsortable = array();
        foreach ($array as $node) {
            Constraints::assertNode($node, 'Array must only contain dom nodes, found "%s".');
            $hash = spl_object_hash($node);
            if ($node->parentNode instanceof \DOMNode || $node === $node->ownerDocument->documentElement) {
                /* use the document position as index, ignore duplicates */
                if (!isset($sortable[$hash])) {
                    $sortable[$hash] = $node;
                }
            } else {
                /* use the object hash as index, ignore duplicates */
                if (!isset($unsortable[$hash])) {
                    $unsortable[$hash] = $node;
                }
            }
        }
        uasort($sortable, new Nodes\Compare($this->xpath));
        $result = array_values($sortable);
        array_splice($result, count($result), 0, array_values($unsortable));
        return $result;
    }

Usage Example

Пример #1
0
 /**
  * Make nodes unique if needed or forced.
  *
  * @param array $nodes
  * @param int $options
  * @return array
  */
 private function unique($nodes, $options)
 {
     if (Constraints::hasOption($options, self::FORCE_SORT) || count($this->_nodes) > 1 && Constraints::hasOption($options, self::UNIQUE)) {
         $nodes = $this->_nodes->unique($nodes);
     }
     return $nodes;
 }