(PECL ds >= 1.0.0)
Ds\Map::put — Asocia una clave a un valor
Asocia una clave
a un valor
,
sobrescribiendo una asociación previa si existe.
Nota:
Las claves de tipo object son soportadas. Si un objeto implementa Ds\Hashable, la igualdad será determinada por la función
equals
del objeto. Si un objeto no implementa Ds\Hashable, los objetos deben ser referencias a la misma instancia para ser considerados iguales.
Nota:
Asimismo, se puede utilizar la sintaxis de array para asociar valores por clave, por ejemplo
$map["clave"] = $valor
.
Atención al uso de la sintaxis de array. Las claves escalares serán coercionadas a
enteros por el motor. Por ejemplo, $map["1"]
intentará acceder a
int(1)
, mientras que $map->get("1")
buscará correctamente la clave de string.
Ver arrays.
key
La clave a asociar al valor.
value
El valor a asociar a la clave.
No devuelve ningún valor.
Ejemplo #1 Ejemplo de Ds\Map::put()
<?php
$map = new \Ds\Map();
$map->put("a", 1);
$map->put("b", 2);
$map->put("c", 3);
print_r($map);
?>
El resultado del ejemplo sería algo similar a:
Ds\Map Object ( [0] => Ds\Pair Object ( [key] => a [value] => 1 ) [1] => Ds\Pair Object ( [key] => b [value] => 2 ) [2] => Ds\Pair Object ( [key] => c [value] => 3 ) )
Ejemplo #2 Ejemplo de Ds\Map::put() utilizando objetos como clave
<?php
class HashableObject implements \Ds\Hashable
{
/**
* Un valor arbitrario a utilizar como valor de hash. No define la igualdad.
*/
private $value;
public function __construct($value)
{
$this->value = $value;
}
public function hash()
{
return $this->value;
}
public function equals($obj): bool
{
return $this->value === $obj->value;
}
}
$map = new \Ds\Map();
$obj = new \ArrayIterator([]);
// Utilizar la misma instancia varias veces sobrescribirá el valor anterior.
$map->put($obj, 1);
$map->put($obj, 2);
// Utilizar varias instancias del mismo objeto creará nuevas asociaciones.
$map->put(new \stdClass(), 3);
$map->put(new \stdClass(), 4);
// Utilizar varias instancias de objetos iguales sobrescribirá los valores anteriores.
$map->put(new \HashableObject(1), 5);
$map->put(new \HashableObject(1), 6);
$map->put(new \HashableObject(2), 7);
$map->put(new \HashableObject(2), 8);
var_dump($map);
?>
El resultado del ejemplo sería algo similar a:
object(Ds\Map)#1 (5) { [0]=> object(Ds\Pair)#7 (2) { ["key"]=> object(ArrayIterator)#2 (1) { ["storage":"ArrayIterator":private]=> array(0) { } } ["value"]=> int(2) } [1]=> object(Ds\Pair)#8 (2) { ["key"]=> object(stdClass)#3 (0) { } ["value"]=> int(3) } [2]=> object(Ds\Pair)#9 (2) { ["key"]=> object(stdClass)#4 (0) { } ["value"]=> int(4) } [3]=> object(Ds\Pair)#10 (2) { ["key"]=> object(HashableObject)#5 (1) { ["value":"HashableObject":private]=> int(1) } ["value"]=> int(6) } [4]=> object(Ds\Pair)#11 (2) { ["key"]=> object(HashableObject)#6 (1) { ["value":"HashableObject":private]=> int(2) } ["value"]=> int(8) } }