【问题标题】:Hash::check method doesn't return true on email keysHash::check 方法在电子邮件密钥上不返回 true
【发布时间】:2015-09-04 08:04:38
【问题描述】:

我有以下数组

$array = [
    'top' => [
        'under' => [
            'emails' =>
                [
                    'test@email.com' => [
                        'key' => 'value',
                    ],
                    'other' => [
                        'key' => 'value',
                    ]
                ],
        ],
    ],
];

然后我执行以下命令

$tmp = Hash::check($array, 'top.under.emails.test@email.com');

这会返回false

如果我将电子邮件值更改为 test,然后执行以下行:

$tmp = Hash::check($array, 'top.under.emails.test');

它返回true。所以我猜这是一个问题,因为@ 字符......有没有办法解决这个问题?

总结:

$tmp = Hash::check($array, 'top.under.emails.other');
var_dump($tmp); //true
$tmp = Hash::check($array, 'top.under.emails.[test@email.com]');
var_dump($tmp); //false
$tmp = Hash::check($array, 'top.under.emails.test@email.com');
var_dump($tmp); //false
$tmp = Hash::check($array, 'top.under.emails.test@email.com.key');
var_dump($tmp); //false

【问题讨论】:

  • 您不需要字符串指示符,即$tmp = Hash::check($array, '{s}.top.under.emails.test@email.com');
  • 不,我没有。如果我这样做了,那么这个 $tmp = Hash::check($array, 'top.under.emails.test'); 将不会返回 true
  • 你试过$tmp = Hash::check($array, 'top.under.emails.test@email.com.key');吗?
  • 首先,如果密钥不存在而电子邮件存在怎么办?我不想检查密钥是否存在。我想检查电子邮件地址是否存在。无论如何它都会返回false

标签: php arrays cakephp multidimensional-array cakephp-3.0


【解决方案1】:

在电子邮件键周围使用方括号来匹配特定键:-

Hash::check($array, 'top.under.emails[test@email.com]');

【讨论】:

  • 哦...你没有放一个点。这就是为什么...让我测试一下。
  • 当您使用方括号表示法时,您不使用点,因为它是等效的。很高兴它对你有用。
  • 对于任何将来的参考,我发现问题在于dot 而不是@,因为Hash 类中有使用explode('.', $data) 的函数
猜你喜欢
  • 2018-06-14
  • 2020-12-23
  • 1970-01-01
  • 2019-08-15
  • 2014-02-06
  • 1970-01-01
  • 2014-02-25
  • 2016-01-16
  • 2012-10-27
相关资源
最近更新 更多