• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

PHP SplDoublyLinkedList类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了PHP中SplDoublyLinkedList的典型用法代码示例。如果您正苦于以下问题:PHP SplDoublyLinkedList类的具体用法?PHP SplDoublyLinkedList怎么用?PHP SplDoublyLinkedList使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



在下文中一共展示了SplDoublyLinkedList类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的PHP代码示例。

示例1: get_result

function get_result($t, $ladders, $snakes)
{
    fill_graph($t, $ladders);
    fill_graph($t, $snakes);
    $len = count($t);
    $vertices = array();
    for ($k = 0; $k < $len; $k++) {
        $vertices[$k] = new vertex($k);
    }
    $adjacencyList = array();
    for ($u = 0; $u < $len; $u++) {
        $list = new SplDoublyLinkedList();
        for ($v = 0; $v < $len; $v++) {
            if ($t[$u][$v] != 0) {
                $list->push(array('vertex' => $vertices[$v], 'distance' => $t[$u][$v]));
            }
        }
        $list->rewind();
        $adjacencyList[] = $list;
    }
    calcShortestPaths($vertices[0], $adjacencyList);
    $path = end($vertices)->path;
    $result = $p = 0;
    for ($n = 0; $n < count($path); $n++) {
        $p++;
        if (@$path[$n + 1] - $path[$n] != 1) {
            $result = $result + ceil(($p - 1) / 6);
            $p = 0;
        }
    }
    //echo "[" . implode(', ', $path) . "]\n\n";
    return $result;
}
开发者ID:eltonoliver,项目名称:Algorithms,代码行数:33,代码来源:snakes_and_ladders.php


示例2: resetCreateGlobalVars

function resetCreateGlobalVars()
{
    global $v0, $v1, $v2, $v3, $v4, $v5, $list0, $list1, $list2, $list3, $list4, $list5, $adjacencyList;
    $v0 = new vertex(0);
    $v1 = new vertex(1);
    $v2 = new vertex(2);
    $v3 = new vertex(3);
    $v4 = new vertex(4);
    $v5 = new vertex(5);
    $list0 = new SplDoublyLinkedList();
    $list0->push(array('vertex' => $v1, 'distance' => 3));
    $list0->push(array('vertex' => $v3, 'distance' => 1));
    $list0->rewind();
    $list1 = new SplDoublyLinkedList();
    $list1->push(array('vertex' => $v0, 'distance' => 3));
    $list1->push(array('vertex' => $v2, 'distance' => 7));
    $list1->rewind();
    $list2 = new SplDoublyLinkedList();
    $list2->push(array('vertex' => $v1, 'distance' => 7));
    $list2->push(array('vertex' => $v3, 'distance' => 8));
    $list2->push(array('vertex' => $v4, 'distance' => 12));
    $list2->rewind();
    $list3 = new SplDoublyLinkedList();
    $list3->push(array('vertex' => $v0, 'distance' => 1));
    $list3->push(array('vertex' => $v2, 'distance' => 8));
    $list3->rewind();
    $list4 = new SplDoublyLinkedList();
    $list4->push(array('vertex' => $v2, 'distance' => 12));
    $list4->push(array('vertex' => $v5, 'distance' => 3));
    $list4->rewind();
    $list5 = new SplDoublyLinkedList();
    $list5->push(array('vertex' => $v4, 'distance' => 3));
    $list5->rewind();
    $adjacencyList = array($list0, $list1, $list2, $list3, $list4, $list5);
}
开发者ID:erackson,项目名称:samu,代码行数:35,代码来源:index.php


示例3: __construct

 function __construct()
 {
     $this->listClients = new SplDoublyLinkedList();
     //=========================load file===============================//
     $read = new ReadCsv();
     $lisClient = $read->get2DArrayFromCsv('files/clientes.csv', ',');
     foreach ($lisClient as $row => $data) {
         $listProductByClient = new SplDoublyLinkedList();
         $contLines = 0;
         $codeProduct = 0;
         foreach ($data as $rowL => $dataL) {
             if ($rowL > 1 && $dataL != "") {
                 if ($contLines == 0) {
                     $codeProduct = $dataL;
                     $contLines++;
                 } else {
                     $listProdCliente = new ListaProductosPorCliente();
                     $listProdCliente->setIdProducto($codeProduct);
                     $listProdCliente->setProducto($dataL);
                     $listProductByClient->push($listProdCliente);
                     $contLines--;
                 }
             }
         }
         $client1 = new Clientes();
         $client1->setName($data[0]);
         $client1->setId($data[1]);
         $client1->setListPruductByClient($listProductByClient);
         $this->listClients->push($client1);
     }
     //=========================//load file=============================//
     $this->listClients->serialize();
     //$this->loadFile();
 }
开发者ID:asandi01,项目名称:phpLitsTest,代码行数:34,代码来源:ListaClientes.php


示例4: createTransitionsList

 /**
  * @param $vertex
  * @return \SplDoublyLinkedList
  */
 public function createTransitionsList($vertex)
 {
     $list = new \SplDoublyLinkedList();
     $list->setIteratorMode(\SplDoublyLinkedList::IT_MODE_FIFO | \SplDoublyLinkedList::IT_MODE_KEEP);
     $list->push($vertex);
     return $list;
 }
开发者ID:ne0h12,项目名称:word-transformer,代码行数:11,代码来源:BreadthFirstSearchAlgorithm.php


示例5: decode

 /**
  * @todo make recursive
  * 
  * Reads a stream character for character until the suffix ('e') is found
  * and returns the remainder of the string.
  *
  * @param string $stream Reads the stream into the buffer.
  *
  * @throws Bencode\Exceptions\IntegerException
  */
 public function decode($stream)
 {
     $flag = false;
     $stream = str_split($stream);
     $buffer = '';
     $size = count($stream);
     $stack = new \SplDoublyLinkedList();
     for ($i = 0; $i < $size - 1; $i++) {
         if ($flag) {
             if (is_numeric($stream[$i]) || $stream[$i] === '-') {
                 $stack->push($stream[$i]);
             }
         }
         if ($stream[$i] === 'i') {
             $flag = true;
         }
         if ($stream[$i] === 'e') {
             $flag = false;
             unset($stream[$i]);
             break;
         }
         unset($stream[$i]);
     }
     foreach ($stack as $s) {
         $buffer .= $s;
     }
     $this->_buffer = $buffer;
     return implode('', array_values($stream));
 }
开发者ID:dsmithhayes,项目名称:bencode,代码行数:39,代码来源:Integer.php


示例6: decode

 /**
  * Reads a stream and decodes the byte character by character. This method
  * will return the remainder of the stream.
  *
  * @param  string $stream The stream to be decoded.
  * @return string         The remainder of the stream, if any.
  */
 public function decode($stream)
 {
     $stream = str_split($stream);
     $buffer = '';
     $size = count($stream);
     $sizeList = new \SplDoublyLinkedList();
     $bufList = new \SplDoublyLinkedList();
     // read the size of the byte from the stream
     for ($i = 0; $i < count($stream); $i++) {
         $temp = $stream[$i];
         unset($stream[$i]);
         if ($temp === ':') {
             break;
         }
         $sizeList->push($temp);
     }
     $stream = array_values($stream);
     $size = 0;
     foreach ($sizeList as $sl) {
         $size .= $sl;
     }
     // read the length of the byte from the stream
     for ($i = 0; $i < $size; $i++) {
         $bufList->push($stream[$i]);
         unset($stream[$i]);
     }
     // read the byte into the buffer
     foreach ($bufList as $bl) {
         $buffer .= $bl;
     }
     $this->_buffer = $buffer;
     return implode('', array_values($stream));
 }
开发者ID:dsmithhayes,项目名称:bencode,代码行数:40,代码来源:Byte.php


示例7: resolve

 public function resolve($obj)
 {
     $result = new \SplDoublyLinkedList();
     foreach ($obj as $value) {
         $result->push($value);
     }
     return $result;
 }
开发者ID:honzabrecka,项目名称:transit-php,代码行数:8,代码来源:ListHandler.php


示例8: castDoublyLinkedList

 public static function castDoublyLinkedList(\SplDoublyLinkedList $c, array $a, Stub $stub, $isNested)
 {
     $mode = $c->getIteratorMode();
     $c->setIteratorMode(\SplDoublyLinkedList::IT_MODE_KEEP | $mode & ~\SplDoublyLinkedList::IT_MODE_DELETE);
     $a += array("~mode" => new ConstStub(($mode & \SplDoublyLinkedList::IT_MODE_LIFO ? 'IT_MODE_LIFO' : 'IT_MODE_FIFO') . ' | ' . ($mode & \SplDoublyLinkedList::IT_MODE_KEEP ? 'IT_MODE_KEEP' : 'IT_MODE_DELETE'), $mode), "~dllist" => iterator_to_array($c));
     $c->setIteratorMode($mode);
     return $a;
 }
开发者ID:Chaireeee,项目名称:chaireeee,代码行数:8,代码来源:SplCaster.php


示例9: castDoublyLinkedList

 public static function castDoublyLinkedList(\SplDoublyLinkedList $c, array $a, Stub $stub, $isNested)
 {
     $prefix = Caster::PREFIX_VIRTUAL;
     $mode = $c->getIteratorMode();
     $c->setIteratorMode(\SplDoublyLinkedList::IT_MODE_KEEP | $mode & ~\SplDoublyLinkedList::IT_MODE_DELETE);
     $a += array($prefix . 'mode' => new ConstStub(($mode & \SplDoublyLinkedList::IT_MODE_LIFO ? 'IT_MODE_LIFO' : 'IT_MODE_FIFO') . ' | ' . ($mode & \SplDoublyLinkedList::IT_MODE_KEEP ? 'IT_MODE_KEEP' : 'IT_MODE_DELETE'), $mode), $prefix . 'dllist' => iterator_to_array($c));
     $c->setIteratorMode($mode);
     return $a;
 }
开发者ID:EnmanuelCode,项目名称:backend-laravel,代码行数:9,代码来源:SplCaster.php


示例10: process

 public function process($index, \SplDoublyLinkedList $list)
 {
     $first = $list->offsetGet($index - 1);
     $second = $list->offsetGet($index + 1);
     $result = $first * $second;
     $list->offsetSet($index - 1, $result);
     unset($list[$index]);
     unset($list[$index]);
 }
开发者ID:ygto,项目名称:calculator,代码行数:9,代码来源:Multiplication.php


示例11: test

function test(SplDoublyLinkedList $l)
{
    $l->push("a");
    $l->push("b");
    $l->push("c");
    echo "ArrayAccess Unset:", PHP_EOL;
    unset($l[0]);
    var_dump($l[0]);
    echo PHP_EOL;
}
开发者ID:badlamer,项目名称:hhvm,代码行数:10,代码来源:unset_non_array.php


示例12: tokenize

 /**
  * {@inheritdoc}
  */
 public function tokenize($userAgent)
 {
     $iterator = new \SplDoublyLinkedList();
     $iterator->setIteratorMode(\SplDoublyLinkedList::IT_MODE_FIFO);
     foreach ($this->getTokens($userAgent) as $position => $token) {
         $token = trim($token);
         $iterator->push(new Node($token, $position, $this->resolveType($token)));
     }
     return $iterator;
 }
开发者ID:zientalak,项目名称:devicedetector,代码行数:13,代码来源:UserAgentTokenizer.php


示例13: process

 public function process($index, \SplDoublyLinkedList $list)
 {
     $first = $list->offsetGet($index - 1);
     $second = $list->offsetGet($index + 1);
     if ($second == 0) {
         throw new \Exception('zero division error');
     }
     $result = $first / $second;
     $list->offsetSet($index - 1, $result);
     unset($list[$index]);
     unset($list[$index]);
 }
开发者ID:ygto,项目名称:calculator,代码行数:12,代码来源:Division.php


示例14: testPHPUnitCommand

 public function testPHPUnitCommand()
 {
     // need an explicit Traversable
     $skippedPaths = new \SplDoublyLinkedList();
     $skippedPaths->push('a');
     $skippedPaths->push('b');
     // going for 'bang for the buck' here re: test converage
     $task = (new \Robo\Task\ApiGen\ApiGen('apigen'))->config('./apigen.neon')->source('src')->extensions('php')->exclude(array('test', 'tmp'))->skipDocPath($skippedPaths)->charset(array('utf8', 'iso88591'))->internal('no')->php(true)->tree('Y')->debug('n');
     $cmd = 'apigen --config ./apigen.neon --source src --extensions php --exclude test --exclude tmp --skip-doc-path a --skip-doc-path b --charset \'utf8,iso88591\' --internal no --php yes --tree yes --debug no';
     verify($task->getCommand())->equals($cmd);
     $task->run();
     $this->apigen->verifyInvoked('executeCommand', [$cmd]);
 }
开发者ID:jjok,项目名称:Robo,代码行数:13,代码来源:ApiGenTest.php


示例15: getIterator

 /**
  * Gets an iterator that iterates over each article.
  *
  * This list is never cached.
  *
  * @param bool $unpublished Whether articles not yet published should be fetched.
  */
 public function getIterator($unpublished = false) : \Iterator
 {
     $articles = new \SplDoublyLinkedList();
     foreach (new \GlobIterator($this->path . '/*.md') as $file) {
         if ($file->isFile()) {
             $article = $this->getArticleFromFile($file->getFilename());
             if ($unpublished || !$article->date()->isFuture()) {
                 $articles->unshift($article);
             }
         }
     }
     return new \IteratorIterator($articles);
 }
开发者ID:coderstephen,项目名称:blog,代码行数:20,代码来源:ArticleStore.php


示例16: retrieveMaintenanceTaskEntry

 /**
  * Retrieve the maintenance task entry, from unique identfier
  * @param $maintenanceTaskEntryIdentifier   Identifier to locate entry
  * @return mixed|null                       Returns the maintenance task entry or null on error
  * @throws InvalidArgumentException         if the provided argument is not set or of correct type
  */
 public function retrieveMaintenanceTaskEntry($maintenanceTaskEntryIdentifier)
 {
     if (!isset($maintenanceTaskEntryIdentifier)) {
         //argument check
         throw new InvalidArgumentException("Missing Argument");
     } else {
         if (!is_numeric($maintenanceTaskEntryIdentifier)) {
             //argument check
             throw new InvalidArgumentException("maintenanceTaskEntryIdentifier is not a number");
         }
     }
     if ($this->maintenanceTaskList->isEmpty()) {
         //if list is empty, unable to return entry
         return null;
     } else {
         $this->maintenanceTaskList->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO);
         //set iteration FIFO
         for ($this->maintenanceTaskList->rewind(); $this->maintenanceTaskList->valid(); $this->maintenanceTaskList->next()) {
             if ($this->maintenanceTaskList->current()->getTaskEntryIdentifier() == $maintenanceTaskEntryIdentifier) {
                 //if entry identifier matches supplied identifier
                 return $this->maintenanceTaskList->current();
             }
             //return the matching entry
         }
     }
     return null;
     //entry with given identifier not found
 }
开发者ID:matthewstyler,项目名称:php-automobile-maintenence-tracker,代码行数:34,代码来源:MaintenanceTracker.php


示例17: setIteratorMode

 /**
  * (excerpt from http://docs.hhvm.com/manual/en/splstack.setiteratormode.php)
  *
  *
  * @mode       mixed   There is only one iteration parameter you can
  *                     modify. The behavior of the iterator (either one or
  *                     the other): SplDoublyLinkedList::IT_MODE_DELETE
  *                     (Elements are deleted by the iterator)
  *                     SplDoublyLinkedList::IT_MODE_KEEP (Elements are
  *                     traversed by the iterator)
  *
  *                     The default mode is 0x2 :
  *                     SplDoublyLinkedList::IT_MODE_LIFO |
  *                     SplDoublyLinkedList::IT_MODE_KEEP Warning
  *
  *                     The direction of iteration can no longer be changed
  *                     for SplStacks. Trying to do so will result in a
  *                     RuntimeException being thrown.
  *
  * @return     mixed   No value is returned.
  */
 public function setIteratorMode($mode)
 {
     if (($mode & self::IT_MODE_LIFO) == 0) {
         throw new RuntimeException('Iterators\' LIFO/FIFO modes for SplStack/SplQueue objects are frozen');
     }
     parent::setIteratorMode($mode);
 }
开发者ID:lsqtongxin,项目名称:hhvm,代码行数:28,代码来源:SplStack.php


示例18: prepareQueueForFutureVisits

 /**
  * @param VisitAction $futureVisitAction
  * @param Expression $lastVisitedExpression
  * @return \SplDoublyLinkedList
  */
 protected function prepareQueueForFutureVisits(VisitAction $futureVisitAction = null, Expression $lastVisitedExpression)
 {
     $stackForExpressions = new \SplDoublyLinkedList();
     if ($lastVisitedExpression instanceof ExpressionIterable) {
         foreach ($lastVisitedExpression as $futureVisit) {
             $stackForExpressions->push($futureVisit);
         }
     } else {
         if ($lastVisitedExpression instanceof ExpressionAggregate) {
             $futureVisit = $lastVisitedExpression->getExpression();
             $stackForExpressions->push($futureVisit);
         }
     }
     if ($futureVisitAction instanceof VisitAction) {
         $stackForExpressions->push($futureVisitAction);
     }
     return $stackForExpressions;
 }
开发者ID:helstern,项目名称:nomsky-lib,代码行数:23,代码来源:DepthFirstStackBasedWalker.php


示例19: traverse

 /**
  * Perform a depth-first traversal on the provided graph.
  *
  * @param Digraph $graph
  *   The graph on which to perform the depth-first search.
  * @param DepthFirstVisitorInterface $visitor
  *   The visitor object to use during the traversal.
  * @param object|\SplDoublyLinkedList $start
  *   A vertex, or vertices, to use as start points for the traversal. There
  *   are a few sub-behaviors here:
  *     - If an SplDoublyLinkedList, SplQueue, or SplStack is provided, the
  *       traversal will deque and visit vertices contained therein.
  *     - If a single vertex object is provided, it will be the sole
  *       originating point for the traversal.
  *     - If no value is provided, DepthFirst::find_sources() is called to
  *       search the graph for source vertices. These are place into an
  *       SplQueue in the order in which they are discovered, and traversal
  *       is then run over that queue in the same manner as if calling code
  *       had provided a queue directly. This method *guarantees* that all
  *       vertices in the graph will be visited.
  *
  * @throws RuntimeException
  *   Thrown if an invalid $start parameter is provided.
  */
 public static function traverse(Digraph $graph, DepthFirstVisitorInterface $visitor, $start = NULL)
 {
     if ($start === NULL) {
         $queue = self::find_sources($graph, $visitor);
     } else {
         if ($start instanceof \SplDoublyLinkedList) {
             $queue = $start;
         } else {
             if (is_object($start)) {
                 $queue = new \SplDoublyLinkedList();
                 $queue->push($start);
             }
         }
     }
     if ($queue->isEmpty()) {
         throw new RuntimeException('No start vertex or vertices were provided, and no source vertices could be found in the provided graph.', E_WARNING);
     }
     $visiting = new \SplObjectStorage();
     $visited = new \SplObjectStorage();
     $visitor->beginTraversal();
     $visit = function ($vertex) use($graph, $visitor, &$visit, $visiting, $visited) {
         if ($visiting->contains($vertex)) {
             $visitor->onBackEdge($vertex, $visit);
         } else {
             if (!$visited->contains($vertex)) {
                 $visiting->attach($vertex);
                 $visitor->onStartVertex($vertex, $visit);
                 foreach ($graph->successorsOf($vertex) as $head) {
                     $visitor->onExamineEdge($vertex, $head, $visit);
                     $visit($head);
                 }
                 $visitor->onFinishVertex($vertex, $visit);
                 $visiting->detach($vertex);
                 $visited->attach($vertex);
             }
         }
     };
     // TODO experiment with adding a generator-producing visitor method that yields the queue here
     while (!$queue->isEmpty()) {
         $vertex = $queue->shift();
         $visit($vertex);
     }
     $visitor->endTraversal();
 }
开发者ID:sdboyer,项目名称:gliph,代码行数:68,代码来源:DepthFirst.php


示例20: traverse

 /**
  * Perform a depth-first traversal on the provided graph.
  *
  * @param DirectedGraph $graph
  *   The graph on which to perform the depth-first search.
  * @param DepthFirstVisitorInterface $visitor
  *   The visitor object to use during the traversal.
  * @param object|\SplDoublyLinkedList $start
  *   A vertex, or vertices, to use as start points for the traversal. There
  *   are a few sub-behaviors here:
  *     - If an SplDoublyLinkedList, SplQueue, or SplStack is provided, the
  *       traversal will deque and visit vertices contained therein.
  *     - If a single vertex object is provided, it will be the sole
  *       originating point for the traversal.
  *     - If no value is provided, DepthFirst::find_sources() is called to
  *       search the graph for source vertices. These are place into an
  *       SplQueue in the order in which they are discovered, and traversal
  *       is then run over that queue in the same manner as if calling code
  *       had provided a queue directly. This method *guarantees* that all
  *       vertices in the graph will be visited.
  *
  * @throws RuntimeException
  *   Thrown if an invalid $start parameter is provided.
  */
 public static function traverse(DirectedGraph $graph, DepthFirstVisitorInterface $visitor, $start = NULL)
 {
     if ($start === NULL) {
         $queue = self::find_sources($graph, $visitor);
     } else {
         if ($start instanceof \SplDoublyLinkedList) {
             $queue = $start;
         } else {
             if (is_object($start)) {
                 $queue = new \SplDoublyLinkedList();
                 $queue->push($start);
             }
         }
     }
     if ($queue->isEmpty()) {
         throw new RuntimeException('No start vertex or vertices were provided, and no source vertices could be found in the provided graph.', E_WARNING);
     }
     $visiting = new \SplObjectStorage();
     $visited = new \SplObjectStorage();
     $visitor->beginTraversal();
     $visit = function ($vertex) use($graph, $visitor, &$visit, $visiting, $visited) {
         if ($visiting->contains($vertex)) {
             $visitor->onBackEdge($vertex, $visit);
         } else {
             if (!$visited->contains($vertex)) {
                 $visiting->attach($vertex);
                 $visitor->onStartVertex($vertex, $visit);
                 $graph->eachAdjacent($vertex, function ($to) use($vertex, &$visit, $visitor) {
                     $visitor->onExamineEdge($vertex, $to, $visit);
                     $visit($to);
                 });
                 $visitor->onFinishVertex($vertex, $visit);
                 $visiting->detach($vertex);
                 $visited->attach($vertex);
             }
         }
     };
     while (!$queue->isEmpty()) {
         $vertex = $queue->shift();
         $visit($vertex);
     }
     $visitor->endTraversal();
 }
开发者ID:davidsoloman,项目名称:drupalconsole.com,代码行数:67,代码来源:DepthFirst.php



注:本文中的SplDoublyLinkedList类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
PHP SplFileInfo类代码示例发布时间:2022-05-23
下一篇:
PHP SplClassLoader类代码示例发布时间:2022-05-23
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap