web-dev-qa-db-fra.com

Existe-t-il des dictionnaires en php?

Par exemple:

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

et ensuite être capable de le référencer comme ceci:

 $names[bob]
54
bzupnick

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",
];
?>

Les tableaux standard peuvent être utilisés de cette façon.

67
Jacob

Non, il n'y a pas de dictionnaires en php. La chose la plus proche que vous avez est un tableau. Cependant, un tableau est différent d'un dictionnaire dans la mesure où les tableaux ont à la fois un index et une clé. Les dictionnaires ont seulement des clés et pas d'index. Qu'est-ce que je veux dire par là?

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

La ligne suivante est autorisée avec le tableau ci-dessus mais donnerait une erreur s'il s'agissait d'un dictionnaire.

print $array[0]

Python a à la fois des tableaux et des dictionnaires. Vous venez peut-être d'un python background

2
Brént Russęll

Permet de peser, oui, ils le sont.

Et ils sont très efficaces lorsqu'ils sont utilisés en php.

Considérons le problème suivant: Ecrivez une fonction qui affiche le nombre de fois où toutes les lettres apparaissent dans une chaîne donnée. Pour simplifier l'utilisation des dictionnaires, je vais décider d'utiliser PHP, mais cette approche peut être utilisée dans presque toutes les langues.

Une approche sans dictionnaires pourrait être la suivante:

<?php
$string = "Hello World!";
$split = str_split($string);

getCount($split);

function getCount($split) {
    while(!empty($split)) {
        $count = 1;
        $newArray = array();
        $firstChar = $split[0];
        for($i = 1; $i < count($split); $i++) {
            $element = $split[$i];
            if($element != $firstChar) {
                $newArray[] = $element;
            } else {
                $count++;
            }
        }
        $split = $newArray;
        echo $firstChar . " = " . $count . "\n";
    }
}

Comme vous pouvez le constater, cette fonction getCount (…) devra parcourir les données du tableau presque autant de fois qu'il y a d'éléments. Cela accomplit la tâche, mais le coût est exponentiellement proportionnel à la taille du tableau. Simplifions cela avec les dictionnaires, allons-nous?

<?php
$string = "Hello World!";
$split = str_split($string);

getCountDictionary($split);

function getCountDictionary($split) {
    $dict = [];
    foreach($split as $char) {
        if (!isset($dict[$char])) {
            $dict[$char] = 1;
        } else {
            $dict[$char]++;
        }
    }

    print_r($dict);
}

Excellent, le code est maintenant plus propre et plus efficace. Avec cette nouvelle approche, nous ne parcourons le tableau qu’une seule fois au cours du traitement et puisque les opérations d’accès et d’insertion dans un dictionnaire sont de complexité O (1).

Explication complète: http://www.jazzcoding.com/2019/02/26/why-i-like-dictionaries-so-much/

0
Helen Wood