Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Имеет ли PHP встроенные структуры данных?
Я смотрю на руководство PHP, и я не вижу раздела о структурах данных, которые есть в большинстве языков, таких как списки и наборы. Я просто слепой или у PHP нет ничего подобного встроенного?
Единственная собственная структура данных в PHP-это массив. К счастью, массивы достаточно гибки и могут быть использованы в качестве таблиц hash.
Однако есть SPL, который является своего рода клоном C++ STL.
http://www.php.net/manual/en/book.spl.php
PHP предлагает структуры данных через стандартное базовое расширение библиотеки PHP (SPL), которое доступно и компилируется по умолчанию в PHP 5.0.0.
Предлагаемые структуры данных доступны с PHP 5 >= 5.3.0 и включают в себя:
Двусвязные Списки
Двусвязный список (DLL) - это список узлов, связанных друг с другом в обоих направлениях. Операции итератора, доступ к обоим концам, добавление или удаление узлов имеют стоимость O(1), когда базовая структура является DLL. Это, следовательно, обеспечивает достойную реализацию для стеков и очередей.
Отвалы
Кучи-это древовидные структуры, которые следуют свойству кучи: каждый узел больше или равен своим дочерним узлам при сравнении с помощью реализованного метода сравнения, который является глобальным для кучи.
Матрицы
Массивы-это структуры, которые хранят данные в непрерывном виде, доступном через индексы. Не путайте их с массивами PHP: массивы PHP фактически реализуются как упорядоченные хэш-таблицы.
Карта
Карта - это структура данных, содержащая пары ключ-значение. PHP массивы можно рассматривать как карты от целых чисел / строк к значениям. SPL предоставляет карту от объектов к данным. Эта карта также может быть использована в качестве набора объектов.
Источник: http://php.net/manual/en/spl.datastructures.php
Ассоциативный массив может использоваться для большинства базовых структур данных hashtable, queue, stack. Но если вы хотите что-то вроде дерева или кучи, я не думаю, что они существуют по умолчанию, но я уверен, что где-то есть бесплатные библиотеки.
Чтобы массив эмулировал стек, используйте array_push() для добавления и array_pop() для удаления
Чтобы массив эмулировал очередь, используйте array_push() для постановки в очередь и array_shift() для снятия очереди
Ассоциативный массив по умолчанию имеет значение hash. В PHP они могут иметь строки в качестве индексов, так что это работает, как и ожидалось:
$array['key'] = 'value';
Наконец, вы можете как бы эмулировать двоичное дерево с массивом, который потенциально может быть потрачен впустую. Это полезно, если вы знаете, что у вас будет маленькое дерево. Используя линейный массив, вы говорите, что для любого индекса (i) вы помещаете его левый потомок в индекс (2i+1) и правый потомок в индекс (2i+2).
Все эти методы хорошо описаны в этой статье о том, как заставить массивы JavaScript эмулировать структуры данных более высокого уровня.
Хотя этому вопросу уже 8 лет, я публикую ответ, потому что PHP 7 вводит расширение под названием ds , предоставляющее специализированные структуры данных в качестве альтернативы массиву.
В ds ,
- использует пространство имен
Ds\. - имеет 3 интерфейса, а именно:
Collection,SequenceиHashable - имеет 8 классов а именно,
Vector,Deque,Queue,PriorityQueue,Map,Set,Stack, иPair
Для получения дополнительной информации проверьте руководство , а также этот пост в блоге имеет некоторые удивительные сведения, включая бенчмарки.
PHP имеет массивы, которые на самом деле являются ассоциативными массивами и могут также использоваться в качестве наборов. Как и многие интерпретируемые языки, PHP предлагает все это под одним колпаком вместо предоставления различных явных типов данных.
E.g.
$lst = array(1, 2, 3);
$hsh = array(1 => "This", 2 => "is a", 3 => "test");
/Edit: кроме того, посмотрите в руководстве .
Массив PHP удваивается как список, так и словарь.
$myArray = array("Apples", "Oranges", "Pears");
$myScalar = $myArray[0] // == "Apples"
Или использовать его как ассоциативный массив:
$myArray = array("a"=>"Apples", "b"=>"Oranges", "c"=>"Pears");
$myScalar = $myArray["a"] // == "Apples"
Вы всегда можете создать свой собственный, если вы не чувствуете, что PHP включает в себя определенный тип структуры данных. Например, вот простая структура данных набора, подкрепленная массивом.
ArraySet: https://github.com/abelperez/collections/blob/master/ArraySet.php
class ArraySet
{
/** Elements in this set */
private $elements;
/** the number of elements in this set */
private $size = 0;
/**
* Constructs this set.
*/
public function ArraySet() {
$this->elements = array();
}
/**
* Adds the specified element to this set if
* it is not already present.
*
* @param any $element
*
* @returns true if the specified element was
* added to this set.
*/
public function add($element) {
if (! in_array($element, $this->elements)) {
$this->elements[] = $element;
$this->size++;
return true;
}
return false;
}
/**
* Adds all of the elements in the specified
* collection to this set if they're not already present.
*
* @param array $collection
*
* @returns true if any of the elements in the
* specified collection where added to this set.
*/
public function addAll($collection) {
$changed = false;
foreach ($collection as $element) {
if ($this->add($element)) {
$changed = true;
}
}
return $changed;
}
/**
* Removes all the elements from this set.
*/
public function clear() {
$this->elements = array();
$this->size = 0;
}
/**
* Checks if this set contains the specified element.
*
* @param any $element
*
* @returns true if this set contains the specified
* element.
*/
public function contains($element) {
return in_array($element, $this->elements);
}
/**
* Checks if this set contains all the specified
* element.
*
* @param array $collection
*
* @returns true if this set contains all the specified
* element.
*/
public function containsAll($collection) {
foreach ($collection as $element) {
if (! in_array($element, $this->elements)) {
return false;
}
}
return true;
}
/**
* Checks if this set contains elements.
*
* @returns true if this set contains no elements.
*/
public function isEmpty() {
return count($this->elements) <= 0;
}
/**
* Get's an iterator over the elements in this set.
*
* @returns an iterator over the elements in this set.
*/
public function iterator() {
return new SimpleIterator($this->elements);
}
/**
* Removes the specified element from this set.
*
* @param any $element
*
* @returns true if the specified element is removed.
*/
public function remove($element) {
if (! in_array($element, $this->elements)) return false;
foreach ($this->elements as $k => $v) {
if ($element == $v) {
unset($this->elements[$k]);
$this->size--;
return true;
}
}
}
/**
* Removes all the specified elements from this set.
*
* @param array $collection
*
* @returns true if all the specified elemensts
* are removed from this set.
*/
public function removeAll($collection) {
$changed = false;
foreach ($collection as $element) {
if ($this->remove($element)) {
$changed = true;
}
}
return $changed;
}
/**
* Retains the elements in this set that are
* in the specified collection. If the specified
* collection is also a set, this method effectively
* modifies this set into the intersection of
* this set and the specified collection.
*
* @param array $collection
*
* @returns true if this set changed as a result
* of the specified collection.
*/
public function retainAll($collection) {
$changed = false;
foreach ($this->elements as $k => $v) {
if (! in_array($v, $collection)) {
unset($this->elements[$k]);
$this->size--;
$changed = true;
}
}
return $changed;
}
/**
* Returns the number of elements in this set.
*
* @returns the number of elements in this set.
*/
public function size() {
return $this->size;
}
/**
* Returns an array that contains all the
* elements in this set.
*
* @returns an array that contains all the
* elements in this set.
*/
public function toArray() {
$elements = $this->elements;
return $elements;
}
}
Я думаю, что вы, возможно, захотите быть немного более конкретным, когда вы говорите, что структуры данных мой ум идет в нескольких направлениях...
Массивы-они, безусловно, хорошо документированы и доступны в интернете. ( http://us.php.net/manual/en/book.array.php )
SQL Data-зависит от используемой базы данных, но большинство из них доступны. ( http://us.php.net/manual/en/book.mysql.php )
OOP - в зависимости от версии могут быть спроектированы и реализованы объекты. ( http://us.php.net/manual/en/language.oop.php) мне пришлось искать OOP, чтобы найти это на сайте php.
Надеюсь, что это поможет, жаль, если это не так.
Конечно, PHP имеет структуры данных. Массив в php невероятно гибок. Примеры:
$foo = array(
'bar' => array(1,'two',3),
'baz' => explode(" ", "Some nice words")
);
Тогда у вас есть абсолютное множество функций массива, доступных для map/filter/walk/etc структур, или преобразования, переворота, реверса и т. д.
Для обязательной необходимости структур данных, пожалуйста, найдите SPL (PHP расширений). Они имеют структуры данных, такие как куча,связанный список,.. и т.д...
PHP не имея списка и набора структур данных точно. но они могут быть достигнуты массивом (с n размерностями), которые обеспечивают несколько данных с одним кластером
$variable = array(
'one' => array(1,'char',3),
'two' => explode("single", "Multiple strings"),
'three' => all(9,'nine',"nine")
);
Они не совсем такие, как список или набор. Но массив может заменить это. Поэтому нет необходимости искать другие структуры данных.
Да, это так.
<?php
$my_array = array("Bird","Cat","Cow");
list($a, $b, $c) = $my_array;
echo "I have several animals, a $a, a $b and a $c.";
?>
http://www.w3schools.com/php/func_array_list.asp
Языки C позволят создать структуру, а затем заполнить ее как строковый буфер (char/byte). Как только он заполнен, код обращается к буферу через элементы структуры. Очень приятно разбирать структурированные (базы данных, изображения и т.д.) файлы.) файлы таким образом. Я не думаю, что вы можете сделать это с PHP структурами - или я (надеюсь) ошибаюсь.
ОК-Ну у PHP есть распаковка и упаковка-функционально то же самое, но не так элегантно.