¿Hay diccionarios en php?

4 minutos de lectura

avatar de usuario
bzupnick

Por ejemplo:

$names = {[bob:27, billy:43, sam:76]};

y luego ser capaz de referenciarlo así:

 $names[bob]

  • Definir “diccionario”. ¿Te refieres a una matriz asociativa simple?

    – jerluc

    27 de junio de 2011 a las 8:51

  • Si está colocando/recuperando los datos de una base de datos, ¿no estaría buscando un diccionario para una base de datos?

    – Niklas

    27 de junio de 2011 a las 8:51

  • si, eso es exactamente a lo que me refiero. y no sé, no he pensado en eso… jajaja

    – bzupnick

    27 de junio de 2011 a las 8:51


  • @cularis tiene tu respuesta entonces

    – jerluc

    27 de junio de 2011 a las 8:52

  • @bzupnick entonces deberías un tipo a ellos.

    – cifra

    27 de junio de 2011 a las 8:59

avatar de usuario
jacob

http://php.net/manual/en/language.types.array.php

<?php
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// as of PHP 5.4
$array = [
    "foo" => "bar",
    "bar" => "foo",
];
?>

Las matrices estándar se pueden usar de esa manera.

  • el problema con las matrices es que cuando las clasifico(), necesito mantener el índice, que es la clave db, para poder volver a consultar ese valor

    – bzupnick

    27 de junio de 2011 a las 8:53

  • Ver esta página: php.net/manual/en/array.sorting.php. Hay más de 20 métodos de clasificación en PHP ;-). Probablemente necesitarás ksort.

    – Graduado van Horck

    27 de junio de 2011 a las 8:57

  • @Félix: Sí. Quise decir que uno 😉 asort es mejor en este caso. 🙂

    – Graduado van Horck

    27 de junio de 2011 a las 9:03

  • o arsort yeh? porque necesito lo más alto para estar en la cima

    – bzupnick

    27 de junio de 2011 a las 9:05

  • Un compañero de trabajo comenzó a trabajar en php desde un fondo C. Me preguntó cómo hacer un diccionario en php, y dije wtf es un diccionario o_o Ahora lo sé

    – Capitán Hipertexto

    8 de agosto de 2017 a las 12:59


avatar de usuario
Brént Russell

No hay diccionarios en php, pero las matrices de PHP pueden comportarse de manera similar a los diccionarios en otros idiomas porque tienen un índice y una clave (a diferencia de los diccionarios en otros idiomas, que solo tienen claves y no tienen índice).

¿Qué quiero decir con eso?

$array = array(
    "foo" => "bar",
    "bar" => "foo"
);

// as of PHP 5.4
$array = [
    "foo" => "bar",
    "bar" => "foo",
];

La siguiente línea está permitida con la matriz anterior en PHP, pero no hay forma de realizar una operación equivalente usando un diccionario en un lenguaje como Python (que tiene tanto matrices como diccionarios).

print $array[0]

Las matrices de PHP también le brindan la capacidad de imprimir un valor al proporcionar el valor a la matriz

print $array["foo"]

Normal array puede servir como una estructura de datos de diccionario. En general, tiene un uso multipropósito: matriz, lista (vector), tabla hash, diccionario, colección, pila, cola, etc.

$names = [
    'bob' => 27,
    'billy' => 43,
    'sam' => 76,
];

$names['bob'];

Y debido al diseño amplio, no obtiene todos los beneficios de la estructura de datos específica. Puede implementar su propio diccionario extendiendo un ArrayObject o puedes usar SplObjectStorage clase que es una implementación de mapa (diccionario) que permite asignar objetos como claves.

Usar matrices:

<?php

$arr = [
    "key" => "value",
    "key2" => "value2"
];

Si tiene la intención de utilizar objetos arbitrarios como claves, es posible que se encuentre con un “tipo de desplazamiento ilegal”. Para resolver esto, puede envolver la clave con la llamada de spl_object_hash función, que toma cualquier objeto y devuelve su hash único.

Sin embargo, una cosa a tener en cuenta es que la clave en sí misma será el hash y, por lo tanto, no podrá obtener una lista de los objetos utilizados para generar esos hash de su diccionario. Esto puede o no ser lo que desea en la implementación particular.

Un ejemplo rápido:

<?php

class Foo
{
}

$dic = [];

$a = new Foo();
$b = new Foo();
$c = $a;

$dic[spl_object_hash($a)] = 'a';
$dic[spl_object_hash($b)] = 'b';
$dic[spl_object_hash($c)] = 'c';

foreach($dic as $key => $val)
{
    echo "{$key} -> {$val}\n";
}

La salida que obtengo es:

0000000024e27223000000005bf76e8a -> c
0000000024e27220000000005bf76e8a -> b

Sus hashes y hashes en diferentes ejecuciones pueden ser diferentes.

¿Ha sido útil esta solución?