Php 里有字典吗?

例如:

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

然后可以这样引用它:

 $names[bob]
233455 次浏览

PHP 中没有字典,但 PHP 数组的行为与其他语言中的字典类似,因为它们既有索引又有键(与其他语言中的字典不同,后者只有键而没有索引)。

我是什么意思?

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


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

The following line is allowed with the above array in PHP, but there is no way to do an equivalent operation using a dictionary in a language like Python(which has both arrays and dictionaries).

print $array[0]

PHP 数组还可以通过向数组提供值来打印值

print $array["foo"]

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

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


$names['bob'];

而且由于它的设计范围很广,所以不能充分利用特定的数据结构。您可以通过扩展 ArrayObject实现自己的 dictionary,也可以使用 SplObjectStorage类,它是 map (dictionary)实现,允许将对象分配为键。

使用数组:

<?php


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

如果您打算使用任意对象作为键,您可能会遇到“非法偏移量类型”。要解决这个问题,您可以使用 spl_object_hash函数的调用来包装密钥,该函数接受任何对象,并返回其唯一的散列。

但是,需要记住的一点是,键本身就是散列,因此您将无法从字典中获得用于生成这些散列的对象列表。这可能是您在特定实现中想要的,也可能不是。

举个简单的例子:

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

我得到的输出是:

0000000024e27223000000005bf76e8a -> c
0000000024e27220000000005bf76e8a -> b

在不同的执行中,您的哈希值和哈希值可能是不同的。