首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向SplObjectStorage对象的数组值动态添加元素

如何向SplObjectStorage对象的数组值动态添加元素
EN

Stack Overflow用户
提问于 2018-02-28 08:27:32
回答 1查看 61关注 0票数 0

假设我们有一个索引

代码语言:javascript
复制
class Index{
    /* indexing fields */
    public $id ;
    public $word;
    
    /* Constructor */
    public function __construct($id, $word)
    {
        $this->id = $id;
        $this->word = $word;
    }
}

到目前一切尚好?好的。

现在,假设我们必须实现一个字典,将单词映射到它们的同义词。

代码语言:javascript
复制
/* Create SplObjectStorage object. should work as data-structure that 
     resembles a HashMap or Dictionary */
     $synonymsDictionary = new \SplObjectStorage(); 

/* Create a word index object, and add it to synonyms dictionary */
    $word = new Index(1,"bad");
    $synonymsDictionary[$word] = array("evil", "mean", "php");

/* print it out */
    echo var_dump($synonymsDictionary[$word]);

这一产出如下:

代码语言:javascript
复制
array(3) {
 [0]=>
   string(4) "evil"
 [1]=>
   string(4) "mean"
 [2]=>
   string(3) "php"
 }

如果想给我们的单词再加一个同义词,那该怎么做呢?我试过这个:

代码语言:javascript
复制
/* Adding one more synonym */
   $synonymsDictionary->offsetGet($word)[] = "unlucky"; 
   echo var_dump($synonymsDictionary[$word]);

然而,这一产出与上面的产出相同:

代码语言:javascript
复制
     array(3) {
        [0]=>
   string(4) "evil"
        [1]=>
   string(4) "mean"
        [2]=>
   string(3) "php"
 }

我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-28 08:33:21

将所有同义词保存为数组而不是单个字符串:

代码语言:javascript
复制
$synonymsDictionary[$word] = array("evil", "mean", "php");

所以现在您可以添加新的项$synonymsDictionary[$word][] = 'unlucky'

此外,offsetGet只返回数据,而不是引用数据。因此,您以后更改的内容永远不会被分配回同义词词典。

所以你需要这个:

代码语言:javascript
复制
$data = $sd->offsetGet($word);
$data[] = 'unlucky';
$sd->offsetSet($word, $data);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49025024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档