PHP 让我可以两次定义数组键

问题描述 投票:0回答:1

PHP的这种行为给我带来了麻烦。

<?php
$myArray = ["thing1" => "a", "thing2" => "b", "thing1" => "c"];
var_dump($myArray);

输出:

array(2) {
  ["thing1"]=>
  string(1) "c"
  ["thing2"]=>
  string(1) "b"
}

如果 PHP 在这种情况下抛出错误,我会更高兴。 有办法改变这种行为吗? 有时我有一个很长的数组,并且没有注意到我不小心定义了一个键两次。 这个错误可能很难追踪。

php arrays error-handling
1个回答
0
投票

您可以创建自己的词典

class UniqueKeyDictionary {
 private $data = [];

 public function add($key, $value) {
    if (array_key_exists($key, $this->data)) {
        throw new Exception("Duplicate key: $key");
    }
    $this->data[$key] = $value;
 }

 public function get($key) {
    return $this->data[$key] ?? null;
 }

 public function getAll() {
    return $this->data;
 }
}

使用方法

try {
  $dict = new UniqueKeyDictionary();
  $dict->add("foo", "bar");
  $dict->add("foo", "baz"); // This will throw an exception
} catch (Exception $e) {
  echo $e->getMessage();
}
© www.soinside.com 2019 - 2024. All rights reserved.