php中有字典吗?

时间:2011-06-27 08:49:40

标签: php dictionary

例如:

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

然后能够像这样引用它:

 $names[bob]

5 个答案:

答案 0 :(得分:58)

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

标准数组可以这样使用。

答案 1 :(得分:0)

可以称重,是的。

它们在Php中使用时非常有效。

让我们考虑以下问题:编写一个函数,该函数打印出所有字母出现在给定字符串中的次数。为了简化字典的使用,我决定使用PHP,但是这种方法几乎可以在任何语言中看到。

没有字典的一种方法可能是:

<?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";
    }
}

如您所见,此getCount(…)函数将需要遍历数组中的数据几乎是数组中元素的多少倍。这样就完成了任务,但是成本与阵列的大小成指数比例。让我们用字典简化一下吧?

<?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);
}

非常好,现在代码更清晰,更有效。使用这种新方法,由于在字典中的访问和插入操作的复杂度为O(1),因此在处理期间仅遍历数组一次。

完整说明: http://www.jazzcoding.com/2019/02/26/why-i-like-dictionaries-so-much/

答案 2 :(得分:0)

常规array可以用作字典数据结构。通常,它具有多种用途:数组,列表(向量),哈希表,字典,集合,堆栈,队列等。

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

$names['bob'];

由于设计广泛,因此无法获得特定数据结构的全部好处。您可以通过扩展ArrayObject来实现自己的字典,也可以使用SplObjectStorage类,它是地图(字典)实现,允许将对象分配为键。

答案 3 :(得分:0)

PHP中的关联数组实际上被视为字典。

PHP中的数组实际上是有序映射。映射是一种将值与键相关联的类型。可以将其视为数组,列表(向量),哈希表(地图的实现),字典,集合,堆栈,队列,甚至更多。

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

// Using the short array syntax
$array = [
    "foo" => "bar",
    "bar" => "foo",
];
?>

数组与字典的区别在于数组既有索引又有键。字典只有键,没有索引。

答案 4 :(得分:-1)

不,php中没有字典。您拥有的最接近的东西是一个数组。但是,数组与字典不同,因为数组既有索引又有键。字典只有键,没有索引。那是什么意思?

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

上面的数组允许以下行,但如果是字典,则会出现错误。

print $myarray[0]

Python同时具有数组和字典。也许您来自python背景