Структуры данных
SPL предоставляет набор стандартных структур данных. Они сгруппированы здесь по своей базовой реализации, которая обычно определяет их общую область применения.
Двусвязные списки
Двусвязный список (DLL) — это список узлов, связанных в обоих направлениях друг с другом. Операции итератора, доступ к обоим концам, добавление или удаление узлов стоимостью O(1), когда основная структура является DLL. Следовательно, они обеспечивает хорошую реализацию для стеков и очередей.
Кучи
Кучи — это древовидные структуры, которые следуют свойствам кучи: каждый узел больше или равен своим потомкам, при этом для сравнения используется внедрённый метод сравнения, который является общим для всей кучи.
Массивы
Массивы — структуры, которые хранят данные в непрерывном виде, доступные через индексы. Не путайте их с массивами PHP: последние на самом деле реализованы в виде упорядоченных хеш-таблиц.
Карта
Карта — это структура данных, содержащая пары ключ-значение. Массивы PHP можно рассматривать как карты, отображающие целые/строковые данные в их значения. SPL предоставляет карту, отображающую объекты к данным. Эта карта также может быть использована как множество объектов.
User Contributed Notes
There are no user contributed notes for this page.
- SPL
- Введение
- Установка и настройка
- Предопределённые константы
- Структуры данных
- Итераторы
- Интерфейсы
- Исключения
- Функции SPL
- Обработка файлов
- Различные классы и интерфейсы
- Copyright © 2001-2023 The PHP Group
- My PHP.net
- Contact
- Other PHP.net sites
- Privacy policy
Коллекции объектов в PHP
На протяжении последних 5 лет я работаю с PHP. У него есть достаточно разных проблем, но это никогда не мешало создавать отлично работающие продукты.
Не смотря на это, есть ряд вещей, которые выполняются внутри достаточно «криво». Один из вопросов, который постоянно тратил мои нервы, был вопрос работы с множествами объектов с помощью массивом данных.
На мой взгляд, массивы в PHP имеют достаточно широкую функциональность, что, кстати, является одной из проблем при работе с множествами объектов.
- Исторически сложившиеся имена функций и отсутствие ОО интерфейса.
- Отсутствие возможности построить ассоциативный массив, где ключами будут объекты.
- Самостоятельный контроль типов объектов в массиве.
- Самостоятельный контроль последовательности индексов в списке.
В результате было принято решение о создании пакета, который должен работать с множествами однотипных объектов (коллекциями).
И так, представляю вашему вниманию пакет Rmk\Collection.
Интерфейсы
Интерфейсы коллекций предназначены для описания функциональности и классификации типов коллекций.
Базовым интерфейсом коллекций является интерфейс Collection.
Интерфейсы Map, Set, List, Queue и Deque наследуют интерфейс Collection и добавляют собственную функциональность.
Интерфейс Iterable предназначен для обхода объектов коллекции. Он поддерживается всеми интерфейсами коллекций.
Iterable
Данный интерфейс предоставляет возможность выполнять обход объектов коллекции и применять к каждому объекту пользовательскую функцию.Collection
Данный интерфейс предназначен для описания базовых функций работы с множеством объектов. Он наследует интерфейсы Countable и Iterable, что позволяет получать количество объектов в коллекции и выполнять обход и применение пользовательской функции для каждого объекта коллекции. Интерфейс коллекции подразумевает, что в коллекции находятся объекты одного типа.Map
Данный интерфейс предназначен для описания функциональности карты объектов. Карта объектов предназначена для построения ассоциативных связей между объектами, где один из объектов является ключем, а другой значением. Интерфейс карты объектов подразумевает, что в карте находятся ключи одного типа. Интерфейс карты объектов подразумевает, что в карте находятся значения одного типа. Интерфейс карты объектов наследует интерфейс Collection.Set
Данный интерфейс предназначен для описания функциональности набора объектов, где объекты являются уникальными в рамках коллекции. Уникальность объектов осуществляется с помощью метода getIdentity(). Интерфейс набора объектов наследует интерфейс Collection.Queue
Данный интерфейс предназначен для описания функциональности очереди объектов. Очередь объектов предназначена для описания структуры данных, когда объекты добавляются в конец очереди, а забираются с начала очереди. Интерфейс очереди объектов наследует интерфейс Collection.Deque
Данный интерфейс предназначен для описания функциональности двунаправленной очереди объектов. Интерфейс двунаправленной очереди объектов наследует интерфейс очереди объектов Queue и добавляет дополнительную функциональность. Функциональность двунаправленной очереди объектов подразумевает работу с очередью с обеих сторон.SequentialList
Данный интерфейс предназначен для описания функциональности списка объектов. Списком объектов является последовательность объектов, где объекты хранятся под последовательными целочисленными индексами. Кроме общей функциональности списка объектов, данный интерфейс определяет метод reverseEach() аналогичный методу Iterable::each() за исключением того, что метод reverseEach() обходит список в обратном порядке. Интерфейс списка объектов наследует интерфейс Collection.Реализации карт
Карты представлены реализациями HashMap и HashStore.
Часть функциональности HashMap и HashStore наследуется от абстрактных классов AbstractCollection и AbstractMap.
Внутренняя структура карт HashMap и HashStore построена на основе сети ассоциативных связей. Это дает возможность реализовывать все операции карт с помощью ассоциативных выборок, что очень сильно повышает скорость их работы. Сложность работы алгоритмов карт равна O(1), что означает, что время установки/получения объектов не изменяется в зависимости от размера карт.
Карты HashMap и HashStore поддерживают любые типы данных для ключей и значений. Это является функциональным преимуществом по сравнению с стандартными Php массивами.
Ключи карты HashMap являются уникальными. Значения карты HashMap не являются уникальными, что позволяет ассоциировать одно значение с несколькими ключами.
Ключи и значения карты HashStore являются уникальными, что позволяет организовывать хранилище уникальных ассоциированных объектов.
Карта HashStore работает в среднем на 20% быстрее карты HashMap. Данное преимущество получено за счет уникальности объектов в HashStore, что требует меньшего количества ассоциативных связей.

Реализации наборов
Наборы представлены единственной реализацией UniqueStore.
Объекты в хранилище UniqueStore. Уникальность объектов обеспечивается за счет метода getIdentity(), который возвращает идентификаторы объектов. В хранилище UniqueStore не могут присутствовать несколько объектов с одинаковыми идентификаторами.
Внутренняя структура хранилища уникальных объектов UniqueStore построена на основе ассоциативных связей между объектами и их идентификаторами. Это дает возможность реализовывать все операции хранилища с помощью ассоциативных выборок, что очень сильно повышает скорость его работы. Сложность работы алгоритмов хранилища уникальных объектов равна O(1), что означает, что время установки/получения объектов не изменяется в зависимости от размера хранилища.

Хранилище уникальных объектов UniqueStore поддерживает любые типы данных для значений.
Реализации списков
Списки представлены реализациями ArrayList и LinkedList.
Списки объектов ArrayList и LinkedList поддерживают последовательный порядок индексов при изменении своей структуры.
Производительность списков объектов ArrayList и LinkedList зависит от количества изменений их структуры. Исходя из этого, самыми «дешевыми» являются операции работы с концом списка (добавление / удаление), а самыми «дорогими» — операции работы с началом списка (добавление / удаление). Сложность работы алгоритмов списка объектов равна O(n * (count — index)), где n — операция; count — размер списка; index — индекс, по которому выполняется операция.
Списки объектов ArrayList и LinkedList поддерживают любые типы данных для значений.
Связанный список объектов LinkedList реализует интерфейс двунаправленной очереди объектов Deque и наследует функциональность от ArrayList.

Реализации очередей
Конкретные реализации очередей отсутствуют, так как связанный список LinkedList отлично покрывает их функциональность.
Несколько примеров использования
Примеры использования карт:
set('k1', $obj1); $map->set('k2', $obj2); $map->set('k3', $obj3); try < $map->set(27, $obj1); > catch (InvalidArgumentException $exc) < echo 'Ключ не подходит по типу.'; >try < $map->set('k4', new UnexpectedValueException); > catch (InvalidArgumentException $exc) < echo 'Значение не подходит по типу.'; >// Обход карты. $map->each(function($value, $key, $thisMap) < /** * @TODO: Обработка карты. */ >); // Удаление по значению. $map->remove($obj1); $map->remove($obj2); // Удаление по ключу. $map->removeKey('k3'); if ($map->isEmpty()) < /** * @TODO: Что делать, если карта пуста? */ >// Преобразование в массив. $array = $map->toArray(); // Внимание! Невозможно преобразовать в массив карту, у которой ключами // являются объекты. $objectMap = new HashMap('stdClass', 'stdClass'); try < $objectArray = $objectMap->toArray(); > catch (UnexpectedValueException $exc)Примеры использования наборов:
add($obj1); $set->add($obj2); $set->add($obj3); // Повторно объекты в хранилище добавлены не будут. $set->add($obj3); try < $set->add(new UnexpectedValueException); > catch (InvalidArgumentException $exc) < echo 'Значение не подходит по типу.'; >// Обход хранилища. $set->each(function($value, $thisSet) < /** * @TODO: Обработка хранилища. */ >); // Удаление объектов из хранилища. $set->remove($obj1); $set->remove($obj2); $set->remove($obj3); // Преобразование в массив. $array = $set->toArray();Примеры использования списков:
add(0, $obj1); $list->add(1, $obj2); $list->add(2, $obj3); try < $list->add(4, $obj1); > catch (OutOfRangeException $exc) < echo 'Индекс находится за пределами списка дальше, чем на единицу.'; >// Обход списка. $list->each(function($value, $index, $thisList) < /** * @TODO: Обработка списка. */ >); // Обход списка в обратном порядке. $list->reverseEach(function($value, $index, $thisList) < /** * @TODO: Обработка списка. */ >); // Удаление из списка. $list->remove($obj1); $list->removeIndex(0); $list->removeFirst(); if ($list->isEmpty())
Преимущества и недостатки
- +
- Увереность в типе объектов в коллекции.
- ОО интерфейс вместо «функций работы с массивами» (основная причина написания данного пакета).
- Уверенность в последовательности индексов в коллекциях типа SequentialList.
- Условно-низкая производительность. То, что можно было выжать из PHP реализации, я старался выжать. Но если бы данный пакет был реализован на С, как PECL модуль, то он бы работал значительно быстрее.
Как создать php карту объекта
Для создания нового объекта, используйте выражение new , создающее в переменной экземпляр класса:
$bar = new foo ;
$bar -> do_foo ();
?>Полное рассмотрение производится в разделе Классы и Объекты.
Преобразование в объект
Если object преобразуется в object , объект не изменится. Если значение другого типа преобразуется в object , создаётся новый экземпляр встроенного класса stdClass . Если значение было null , новый экземпляр будет пустым. Массивы преобразуются в object с именами полей, названными согласно ключам массива и соответствующими им значениям. Обратите внимание, что в этом случае до PHP 7.2.0 числовые ключи не будут доступны, пока не проитерировать объект.
$obj = (object) array( ‘1’ => ‘foo’ );
var_dump (isset( $obj ->< '1' >)); // выводит ‘bool(true)’, начиная с PHP 7.2.0; ‘bool(false)’ ранее
var_dump ( key ( $obj )); // выводит ‘string(1) «1»‘, начиная с PHP 7.2.0; ‘int(1)’ ранее
?>?phpПри преобразовании любого другого значения, оно будет помещено в поле с именем scalar соответствующему типу.
$obj = (object) ‘привет’ ;
echo $obj -> scalar ; // выведет ‘привет’
?>?phpUser Contributed Notes 28 notes
11 years ago
By far the easiest and correct way to instantiate an empty generic php object that you can then modify for whatever purpose you choose:
I had the most difficult time finding this, hopefully it will help someone else!
7 years ago
In PHP 7 there are a few ways to create an empty object:
$obj1 = new \stdClass ; // Instantiate stdClass object
$obj2 = new class<>; // Instantiate anonymous class
$obj3 = (object)[]; // Cast empty array to objectvar_dump ( $obj1 ); // object(stdClass)#1 (0) <>
var_dump ( $obj2 ); // object(class@anonymous)#2 (0) <>
var_dump ( $obj3 ); // object(stdClass)#3 (0) <>
?>$obj1 and $obj3 are the same type, but $obj1 !== $obj3. Also, all three will json_encode() to a simple JS object <>:
8 years ago
As of PHP 5.4, we can create stdClass objects with some properties and values using the more beautiful form:
$object = (object) [
‘propertyOne’ => ‘foo’ ,
‘propertyTwo’ => 42 ,
];
?>7 years ago
echo «» ;
print_r ( $obj ); //stdClass Object created by casting of array$newobj = new stdClass (); //create a new
$newobj -> name = «India» ;
$newobj -> work = «Development» ;
$newobj -> address = «patna» ;$new = (array) $newobj ; //convert stdClass to array
echo «» ;
print_r ( $new ); //print new object##How deals with Associative Array
$test = [ Details =>[ ‘name’ , ‘roll number’ , ‘college’ , ‘mobile’ ], values =>[ ‘Naman Kumar’ , ‘100790310868’ , ‘Pune college’ , ‘9988707202’ ]];
$val = json_decode ( json_encode ( $test ), false ); //convert array into stdClass objectecho «» ;
print_r ( $val );echo (( is_array ( $val ) == true ? 1 : 0 ) == 1 ? «array» : «not an array» ). «» ; // check whether it is array or not
echo (( is_object ( $val ) == true ? 1 : 0 ) == 1 ? «object» : «not an object» ); //check whether it is object or not
?>9 years ago
Here a new updated version of ‘stdObject’ class. It’s very useful when extends to controller on MVC design pattern, user can create it’s own class.
Hope it help you.
class stdObject public function __construct (array $arguments = array()) if (!empty( $arguments )) foreach ( $arguments as $property => $argument ) $this -> < $property >= $argument ;
>
>
>public function __call ( $method , $arguments ) $arguments = array_merge (array( «stdObject» => $this ), $arguments ); // Note: method argument 0 will always referred to the main class ($this).
if (isset( $this ->< $method >) && is_callable ( $this ->< $method >)) return call_user_func_array ( $this ->< $method >, $arguments );
> else throw new Exception ( «Fatal error: Call to undefined method stdObject:: < $method >()» );
>
>
>$obj = new stdObject ();
$obj -> name = «Nick» ;
$obj -> surname = «Doe» ;
$obj -> age = 20 ;
$obj -> adresse = null ;$obj -> getInfo = function( $stdObject ) < // $stdObject referred to this object (stdObject).
echo $stdObject -> name . » » . $stdObject -> surname . » have » . $stdObject -> age . » yrs old. And live in » . $stdObject -> adresse ;
>;$obj -> setAge ( 24 ); // Parameter value 24 is passing to the $age argument in method ‘setAge()’.
// Create dynamic method. Here i’m generating getter and setter dynimically
// Beware: Method name are case sensitive.
foreach ( $obj as $func_name => $value ) if (! $value instanceOf Closure )$obj -> setName ( «John» );
$obj -> setAdresse ( «Boston» );14 years ago
CAUTION:
«Arrays convert to an object with properties named by keys, and corresponding values».This is ALWAYS true, which means that even numeric keys are accepted when converting.
But the resulting properties cannot be accessed, since they don’t match the variables naming rules.So this:
$x = (object) array( ‘a’ => ‘A’ , ‘b’ => ‘B’ , ‘C’ );
echo ‘' . print_r ( $x , true ). '
‘ ;
?>
works and displays:
stdClass Object
(
[a] => A
[b] => B
[0] => C
)But this:
echo ‘
‘ . $x -> a ;
echo ‘
‘ . $x -> b ;
echo ‘
‘ . $x ->< 0 >; # (don’t use $x->0, which is obviously a syntax error)
?>
fails and displays:
A
B
Notice: Undefined property: stdClass::$0 in.5 years ago
another way to instantiate an empty generic php object:
6 years ago
/**
* Used for checking empty objects/array
* @uses How to check empty objects and array in php code
* @author Aditya Mehrotra
*//**
* Empty class
*/
class EmptyClass$obj = new stdClass ();
//or any other class empty object
$emptyClassObj = new EmptyClass ();
$array = array();if (empty( $array )) echo ‘array is empty’ ; //expected result
> else echo ‘array is not empty’ ; //unexpected result
>
echo «
» ;if (empty( $obj )) echo ‘object is empty’ ; //expected result
> else echo ‘object is not empty’ ; //unexpected result
>
echo «
» ;if (empty( $emptyClassObj )) echo ‘EmptyClass is empty’ ; //expected result
> else echo ‘EmptyClass is not empty’ ; //unexpected result
>
echo «
» ;//Result SET 1
//array is empty => expected result
//object is not empty => ouch what happened
//EmptyClass is not empty => ouch what happened/**
* So what we do for checking empty object
* @solution use any known property or check property count
* Or you can use below method
* Count function will not return 0 in empty object
*///Below line print «Object count:1»
echo ‘Object count:’ . count ( $obj );/**
* This function is used to get object item counts
* @function getCount
* @access public
* @param object|array $var
* @return integer
*/
function getCount ( $var ) $count = 0 ;
if ( is_array ( $var ) || is_object ( $var )) foreach ( $var as $value ) $count ++;
>
>
unset( $value );
return $count ;
>//Running code again with new logic
if ( getCount ( $array ) === 0 ) echo ‘array is empty’ ; //expected result
> else echo ‘array is not empty’ ; //unexpected result
>
echo «
» ;if ( getCount ( $obj ) === 0 ) echo ‘object is empty’ ; //expected result
> else echo ‘object is not empty’ ; //unexpected result
>if ( getCount ( $emptyClassObj ) === 0 ) echo ‘EmptyClass is empty’ ; //expected result
> else echo ‘EmptyClass is not empty’ ; //unexpected result
>//Result SET 2
//array is empty => expected result ##everything is all right
//object is empty => expected result ##everything is all right
//EmptyClass is empty => expected result ##everything is all right15 years ago
In response to harmor: if an array contains another array as a value, you can recursively convert all arrays with:
function arrayToObject ( $array ) foreach( $array as $key => $value ) if( is_array ( $value ) ) $array [ $key ] = arrayToObject ( $value );
>
return (object) $array ;
>
?>13 years ago
You can create [recursive] objects with something like:
$literalObjectDeclared = (object) array(
‘foo’ => (object) array(
‘bar’ => ‘baz’ ,
‘pax’ => ‘vax’
),
‘moo’ => ‘ui’
);
print $literalObjectDeclared -> foo -> bar ; // outputs «baz»!
?>11 years ago
Do you remember some JavaScript implementations?
// var timestamp = (new Date).getTime();
Now it’s possible with PHP 5.4.*;
class Foo
public $a = «I’m a!» ;
public $b = «I’m b!» ;
public $c ;public function getB () return $this -> b ;
>public function setC ( $c ) $this -> c = $c ;
return $this ;
>public function getC () return $this -> c ;
>
>print (new Foo )-> a ; // I’m a!
print (new Foo )-> getB (); // I’m b!
?>or
// $_GET[«c»] = «I’m c!»;
print (new Foo )
-> setC ( $_GET [ «c» ])
-> getC (); // I’m c!
?>6 years ago
In PHP 5+, objects are passed by reference. This has got me into trouble in the past when I’ve tried to make arrays of objects.
For example, I once wrote something like the following code, thinking that I’d get an array of distinct objects. However, this is wrong. This code will create an array of multiple references to the same object.$arrayOfMyNumbers = array();
$arrayItem = new myNumber ();
for( $i = 0 ; $i < 3 ; $i ++ ) $arrayItem -> value = $i ;
$arrayOfMyNumbers [] = $arrayItem ;
>notice that the value at each index in the array is the same. That is because the array is just 3 references to the same object, but we change the property of this object every time the for loop runs. This isn’t very useful. Instead, I’ve changed the code below so that it will create an array with three distinct references to three distinct objects. (if you’re having a hard time understanding references, think of this as an array of objects, and that this is just the syntax you have to use.)
$arrayOfMyNumbers = array();
for( $i = 0 ; $i < 3 ; $i ++ ) $arrayItem = new myNumber ();
$arrayItem -> value = $i ;
$arrayOfMyNumbers [] = $arrayItem ;
>Notice how the creation of a new object («$arrayItem = new myNumber();») must happen every time the for loop runs for this to work.
This took me forever to figure out, so I hope this helps someone else.6 years ago
If you need to force json_encode() to produce an object even when an array is empty or does not have successive 0-based numeric indices, you can simply convert the array to an object. JSON_FORCE_OBJECT does the same with ALL arrays, which might not be what you want.
echo json_encode ([[]]), «\n» ;
// output: [[]]echo json_encode ([[]], JSON_FORCE_OBJECT ), «\n» ;
// output: >echo json_encode ([(object)[]]), «\n» ;
// output: [<>]echo json_encode ([ 0 => «a» , 1 => «b» , 9 => «c» ]), «\n» ;
// output:echo json_encode ([ 0 => «a» , 1 => «b» , 2 => «c» ]), «\n» ;
// output: [«a»,»b»,»c»]16 years ago
In response to sirbinam.
You cannot call a function or method before it exists. In your example, the global instance of stdout is just being passed around to differnet references (pointers). It however exists in the «dump» function scope via the global keyword.The code below works fine and illustrates that «stdout» has been defined before its instantiation.
class profiler function profiler () $this -> starttime = microtime ();
>function dump () global $stdout ;
$this -> endtime = microtime ();
$duration = $this -> endtime — $this -> starttime ;
$stdout -> write ( $duration );
>
>class stdout function write ( $msg ) echo $msg ;
>
>?>
All classes and functions declarations within a scope exist even before the php execution reaches them. It does not matter if you have your classes defined on the first or last line, as long as they are in the same scope as where they are called and are not in a conditional statement that has not been evaluated yet.
18 years ago
If you use new to create items in an array, you may not get the results you want since the parameters to array will be copies of the original and not references.
By Example:
class Store var $item = 3;
>$a = array( new Store() );
$b = $a;
$a[0]->item = 2;
print( «|» . $b[0]->item . «|
» ); //shows 3This is extremely important if you intend on passing arrays of classes to functions and expect them to always use the same object instance!
Note: The following syntax is desired (or maybe even the default notation should translate as this):
$a = array( &new Store() );5 years ago
in php 7.2 this code works despite documentation said it gives false
$obj = (object) array( ‘1’ => ‘foo’ );
9 years ago
If you call var_export() on an instance of stdClass, it attempts to export it using ::__set_state(), which, for some reason, is not implemented in stdClass.
However, casting an associative array to an object usually produces the same effect (at least, it does in my case). So I wrote an improved_var_export() function to convert instances of stdClass to (object) array () calls. If you choose to export objects of any other class, I’d advise you to implement ::__set_state().
/**
* An implementation of var_export() that is compatible with instances
* of stdClass.
* @param mixed $variable The variable you want to export
* @param bool $return If used and set to true, improved_var_export()
* will return the variable representation instead of outputting it.
* @return mixed|null Returns the variable representation when the
* return parameter is used and evaluates to TRUE. Otherwise, this
* function will return NULL.
*/
function improved_var_export ( $variable , $return = false ) if ( $variable instanceof stdClass ) $result = ‘(object) ‘ . improved_var_export ( get_object_vars ( $variable ), true );
> else if ( is_array ( $variable )) $array = array ();
foreach ( $variable as $key => $value ) $array [] = var_export ( $key , true ). ‘ => ‘ . improved_var_export ( $value , true );
>
$result = ‘array (‘ . implode ( ‘, ‘ , $array ). ‘)’ ;
> else $result = var_export ( $variable , true );
>if (! $return ) print $result ;
return null ;
> else return $result ;
>
>// Example usage:
$obj = new stdClass ;
$obj -> test = ‘abc’ ;
$obj -> other = 6.2 ;
$obj -> arr = array ( 1 , 2 , 3 );improved_var_export ((object) array (
‘prop1’ => true ,
‘prop2’ => $obj ,
‘assocArray’ => array (
‘apple’ => ‘good’ ,
‘orange’ => ‘great’
)
));/* Output:
(object) array (‘prop1’ => true, ‘prop2’ => (object) array (‘test’ => ‘abc’, ‘other’ => 6.2, ‘arr’ => array (0 => 1, 1 => 2, 2 => 3)), ‘assocArray’ => array (‘apple’ => ‘good’, ‘orange’ => ‘great’))
*/
?>Note: This function spits out a single line of code, which is useful to save in a cache file to include/eval. It isn’t formatted for readability. If you want to print a readable version for debugging purposes, then I would suggest print_r() or var_dump().
Как создать php карту объекта
При помощи API карт вы сможете:
создавать интерактивные карты на веб-странице;
показывать на карте различные объекты (маркеры, попапы, геометрические объекты);производить поиск на карте: определять координаты геообъектов по их названиям и названия по координатам.
Исходный код API карт доступен на GitHub, проект открыт к предложениям и пулл-реквестам.
Начало работы
Ниже приведен простой пример создания карты.
Подключите API
Для подключения JavaScript кода API добавьте в секцию head HTML-страницы следующий код:
Если вас интересует подключение кода API с помощью npm, перейдите в раздел Подключение API.
Создайте контейнер карты
Для создания контейнера, в котором будет отображаться карта, необходимо добавить блочный HTML-элемент необходимого вам размера:
Создайте карту
Теперь все готово к тому, чтобы создать карту. Для этого добавьте следующий код в секцию head:
В данном примере карта принимает два параметра:
center — координаты центра карты в формате [широта, долгота];
zoom — коэффициент масштабирования в диапазоне от 1 до 18.Добавьте маркер на карту
После создания карты вы можете отобразить на ней маркер, добавив одну строку кода в написанный ранее код:
Покажите попап с информацией
Если немного расширить добавленную выше строку кода с маркером, тогда при клике в маркер будет отображаться попап (всплывающий блок) с необходимой вам информацией:
Всё вместе
API карт 2ГИС Дальнейшие шаги
Техническая поддержка
Если у вас возникли сложности в работе с API карт — напишите нам письмо и мы обязательно поможем вам разобраться.
