PHP SPL标准库里实现了几种简单的线性表和树型结构,其中包括了双链表和双链表实现的队列和栈、最大堆、最小堆和优先队列。双链表是一种重要的线性存储结构,对于双链表中的每个节点,不仅仅存储自己的信息,还要保存前驱和后继节点的地址。
双链表对php开发程序来讲是很重要的一种数据结构,可以把PHP数组中想想成一个双链表,而PHP内置的SplDoublyLinkedList类通过实现迭代器、数组访问和获取数量的接口使程序访问对象变得访问数组一样方便。(推荐学习:PHP编程从入门到精通)
SplDoublyLinkedList类代码如下:
<?php /** * PS:预定义接口Iterator, ArrayAccess, Countable */ class SplDoublyLinkedList implements Iterator, ArrayAccess, Countable { /** * @var _llist 定义一个数组用于存放数据 */ protected $_llist = array(); /** * @var _it_mode 链表的迭代模式 */ protected $_it_mode = 0; /** * @var _it_pos 链表指针 */ protected $_it_pos = 0; /** * 迭代模式 * @see setIteratorMode */ const IT_MODE_LIFO = 0x00000002; const IT_MODE_FIFO = 0x00000000; const IT_MODE_KEEP = 0x00000000; const IT_MODE_DELETE = 0x00000001; /** * @return 返回被移出尾部节点元素 * @throw RuntimeException 如果链表为空则抛出异常 */ public function pop() { if (count($this->_llist) == 0) { throw new RuntimeException("Can't pop from an empty datastructure"); } return array_pop($this->_llist); } /** * @return 返回被移出头部节点元素 * @throw RuntimeException 如果链表为空则抛出异常 */ public function shift() { if (count($this->_llist) == 0) { throw new RuntimeException("Can't shift from an empty datastructure"); } return array_shift($this->_llist); } /** * 往链表尾部添加一个节点元素 * @param $data 要添加的节点元素 */ public function push($data) { array_push($this->_llist, $data); return true; } /** * 往链表头部添加一个节点元素 * @param $data 要添加的节点元素 */ public function unshift($data) { array_unshift($this->_llist, $data); return true; } /** * @return 返回尾部节点元素,并把指针指向尾部节点元素 */ public function top() { return end($this->_llist); } /** * @return 返回头部节点元素,并把指针指向头部节点元素 */ public function bottom() { return reset($this->_llist); } /** * @return 返回链表节点数 */ public function count() { return count($this->_llist); } /** * @return 判断链表是否为空 */ public function isEmpty() { return ($this->count() == 0); } /** * 设置迭代模式 * - 迭代的顺序 (先进先出、后进先出) * - SplDoublyLnkedList::IT_MODE_LIFO (堆栈) * - SplDoublyLnkedList::IT_MODE_FIFO (队列) * * - 迭代过程中迭代器的行为 * - SplDoublyLnkedList::IT_MODE_DELETE (删除已迭代的节点元素) * - SplDoublyLnkedList::IT_MODE_KEEP (保留已迭代的节点元素) * * 默认的模式是 0 : SplDoublyLnkedList::IT_MODE_FIFO | SplDoublyLnkedList::IT_MODE_KEEP * * @param $mode 新的迭代模式 */ public function setIteratorMode($mode) { $this->_it_mode = $mode; } /** * @return 返回当前的迭代模式 * @see setIteratorMode */ public function getIteratorMode() { return $this->_it_mode; } /** * 重置节点指针 */ public function rewind() { if ($this->_it_mode & self::IT_MODE_LIFO) { $this->_it_pos = count($this->_llist)-1; } else { $this->_it_pos = 0; } } /** * @return 判断指针对应的节点元素是否存在 */ public function valid() { return array_key_exists($this->_it_pos, $this->_llist); } /** * @return 返回当前指针的偏移位置 */ public function key() { return $this->_it_pos; } /** * @return 返回当前指针对应的节点元素 */ public function current() { return $this->_llist[$this->_it_pos]; } /** * 将指针向前移动一个偏移位置 */ public function next() { if ($this->_it_mode & self::IT_MODE_LIFO) { if ($this->_it_mode & self::IT_MODE_DELETE) { $this->pop(); } $this->_it_pos--; } else { if ($this->_it_mode & self::IT_MODE_DELETE) { $this->shift(); } else { $this->_it_pos++; } } } /** * @return 偏移位置是否存在 * * @param $offset 偏移位置 * @throw OutOfRangeException 如果偏移位置超出范围或者无效则抛出异常 */ public function offsetExists($offset) { if (!is_numeric($offset)) { throw new OutOfRangeException("Offset invalid or out of range"); } else { return array_key_exists($offset, $this->_llist); } } /** * @return 获取偏移位置对应的值 * * @param $offset 偏移位置 * @throw OutOfRangeException 如果偏移位置超出范围或者无效则抛出异常 */ public function offsetGet($offset) { if ($this->_it_mode & self::IT_MODE_LIFO) { $realOffset = count($this->_llist)-$offset; } else { $realOffset = $offset; } if (!is_numeric($offset) || !array_key_exists($realOffset, $this->_llist)) { throw new OutOfRangeException("Offset invalid or out of range"); } else { return $this->_llist[$realOffset]; } } /** * @return 设置偏移位置对应的值 * * @param $offset 偏移位置 * @throw OutOfRangeException 如果偏移位置超出范围或者无效则抛出异常 */ public function offsetSet($offset, $value) { if ($offset === null) { return $this->push($value); } if ($this->_it_mode & self::IT_MODE_LIFO) { $realOffset = count($this->_llist)-$offset; } else { $realOffset = $offset; } if (!is_numeric($offset) || !array_key_exists($realOffset, $this->_llist)) { throw new OutOfRangeException("Offset invalid or out of range"); } else { $this->_llist[$realOffset] = $value; } } /** * @return 删除偏移位置对应的值 * * @param $offset 偏移位置 * @throw OutOfRangeException 如果偏移位置超出范围或者无效则抛出异常 */ public function offsetUnset($offset) { if ($this->_it_mode & self::IT_MODE_LIFO) { $realOffset = count($this->_llist)-$offset; } else { $realOffset = $offset; } if (!is_numeric($offset) || !array_key_exists($realOffset, $this->_llist)) { throw new OutOfRangeException("Offset invalid or out of range"); } else { array_splice($this->_llist, $realOffset, 1); } } } ?>
Atas ialah kandungan terperinci php没有链表类型么. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini
