【问题标题】:Cannot get array element by key, but key exists on array无法按键获取数组元素,但数组中存在键
【发布时间】:2019-02-12 15:35:07
【问题描述】:

我正在使用 Drupal 8,但由于这对我来说似乎是一个 PHP 问题,所以我在这里而不是在 Drupal Answers 上问它。

以下代码中的isset 语句应该返回TRUE,但它没有:

/*
$specifier = 'field_google_hire_identifier‎'
$field_storage_definitions = array of objects
*/

var_dump(
  isset($field_storage_definitions[$specifier]),
  $specifier,
  $field_storage_definitions[$specifier],
  $field_storage_definitions
);
die;

屏幕上的输出: 其他数组元素... 其他数组元素...

原始输出 HTML:https://codepen.io/anon/pen/ZwRJdR

数组键:

var_dump( array_keys($field_storage_definitions));

屏幕上的输出:

我有点不知道为什么isset($field_storage_definitions[$specifier]FALSE$field_storage_definitions[$specifier]NULL

我卸载了 APC 并禁用了 Opcache。

【问题讨论】:

  • $field_storage_definitions[$specifier] 为 NULL - 是不是出乎意料?
  • @Orlando 尝试运行 var_dump(array_keys($field_storage_definitions));
  • 请检查$specifier真实内容——根据该变量的第一次转储,它包含一个31个字符的字符串,而字符串field_google_hire_identifier显然包含只有 28 个字符
  • 您是否检查过var_dump 不会显示的隐藏字符?
  • @NicoHaase 非常感谢您的帮助。现在我知道问题出在哪里,以及要注意什么。输入字符串很好,但是在某个地方添加了从右到左的标记。必须深入研究发生这种情况的地方。但这超出了这个问题的范围。

标签: php drupal-8 drupal-fields


【解决方案1】:

在用于选择数组键的字符串末尾有一个right to left mark。由于字符串和数组键不相同,所以无法检索到数组键。

可以使用从左到右的标记删除

preg_replace('/\p{C}+/u', "", $string)

https://stackoverflow.com/a/23131396/6653862

您可以使用以下方法检查字符串是否包含不可见字符

json_encode($string)

【讨论】:

  • 很高兴您分享了这一见解!
【解决方案2】:

如果我是你,我会试试这个:

$true_Array = (Array)$array_With_Object;

【讨论】:

  • 你对此有什么解释吗?
  • 这会产生相同的输出,$field_storage_definitions 变量已经是一个数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 2017-10-25
  • 2018-08-17
  • 2018-10-26
  • 2011-01-17
  • 2020-05-03
相关资源
最近更新 更多