使用字符串引用数组时出现非法字符串偏移量


Illegal string offset when using string to reference array

我有类,每个类都有一个与日期相关的成员变量,该变量始终具有相同的命名格式 - field_{$node->type}_date

例如,如果我的节点类型是"car",则日期字段将命名为field_car_date

所以我正在遍历我所有的节点,我想访问每个节点的日期相关字段。但是我收到一个错误。这是代码

$date_field_key = 'field_' . $node->type . '_date';
if (isset($node->$date_field_key['und'][0]['value'])) {

由于第二行,我收到错误。错误是 - Illegal string offset 'und'与日期相关的变量是一个数组,它确实有一个键为"und"的元素。如果我明确写出该行 - $node->field_car_date['und'][0]['value'] - 它工作正常。只是当我动态创建字段名称时,我才遇到这个问题。

任何解决方案,我的语法不正确吗?

您需要

{}中将键值括起来,因为它是动态分配的变量。

在第二行中,您应该有$node->$date_field_key['und'][0]['value']

$node->{$date_field_key}['und'][0]['value']

注意date_field_key周围的{}

祝你好运!

没有理由保留变量:

$array = $this->$date_field_key;
$value = $array['und'][0]['value'];

如果你让它工作,那么我们可以讨论更高级的主题。