【问题标题】:Are there dictionaries in php?php中有字典吗?
【发布时间】:2011-09-23 08:17:46
【问题描述】:

例如:

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

然后可以像这样引用它:

 $names[bob]

【问题讨论】:

  • 定义“字典”。你指的是简单的关联数组吗?
  • 如果您正在从数据库中放置/检索数据,您不是要为数据库寻找字典吗?
  • 是的,这正是我所指的。和 idk,我还没有想过 tht....lol
  • @cularis 有你的答案
  • @bzupnick 那么你应该asort他们。

标签: php dictionary associative-array terminology


【解决方案1】:

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

标准数组可以这样使用。

【讨论】:

  • 数组的问题是,当我对它们进行排序()时,我需要保留索引,即数据库键,所以我可以重新查询该值
  • 查看此页面:php.net/manual/en/array.sorting.php。 PHP 中有超过 20 种排序方法 ;-)。你可能需要ksort
  • @Felix:是的。我的意思是在这种情况下,一个 ;-) asort 更好。 :-)
  • 或arsort是吗?因为我需要最高才能在上面
  • 有一位同事从 C 背景开始使用 php。他问我怎么用ph​​p做字典,我说wtf是字典o_o现在我知道了
【解决方案2】:

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

这是什么意思?

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

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

在 PHP 中,上述数组允许使用以下行,但无法使用 Python 等语言(同时具有数组和字典)中的字典进行等效操作。

print $array[0]

PHP 数组还使您能够通过向数组提供值来打印值

print $array["foo"]

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      使用数组:

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

      【讨论】:

        【解决方案5】:

        如果您打算使用任意对象作为键,您可能会遇到“非法偏移类型”。要解决此问题,您可以调用 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
        

        您的哈希值,以及不同执行时的哈希值可能不同。

        【讨论】:

          猜你喜欢
          • 2011-08-01
          • 2012-04-06
          • 2010-10-26
          • 2010-10-29
          • 1970-01-01
          • 1970-01-01
          • 2020-10-20
          • 1970-01-01
          相关资源
          最近更新 更多