我有这个数组
$arr = ['field_event_start_date', 'widget', 0, 'value', '#date_part_order', 3]
我想以下面的格式将其转换为此数组
$form['field_event_start_date']['widget'][0]['value']['#date_part_order'][3]
尝试将数组附加到$form
数组。
我有一个$form
数组,其中包含许多字段,我想取消设置一组字段。上面的数组是更大数组的一部分。如果我采用这个数组,我如何将其转换为如下所示的数组
$form['field_event_start_date']['widget'][0]['value']['#date_part_order'][3]
我试过,像这样崩溃$form[implode('][', $arr)]
但这总是说,未定义的索引。
我需要运行的最终代码是
unset($form['field_event_start_date']['widget'][0]['value']['#date_part_order'][3]);
然而,有很多这样的,深度变化的数量。我需要编写一个通用函数来实现这一目标。
答案 0 :(得分:1)
在Drupal 8中,您可以使用NestedArray::unsetValue()
取消设置嵌套数组的值。您还可以使用NestedArray::getValue()
和NestedArray::setValue()
使用一组键($parents
)从嵌套数组中获取和设置值。
Drupal 7只有drupal_array_get_nested_value()
和drupal_array_set_nested_value()
。但没有drupal_array_unset_nested_value()
。它可以很容易地从Drupal 8移植:
/**
* Unsets a value in a nested array with variable depth.
*
* This helper function should be used when the depth of the array element you
* are changing may vary (that is, the number of parent keys is variable). It
* is primarily used for form structures and renderable arrays.
*
* @param array $array
* A reference to the array to modify.
* @param array $parents
* An array of parent keys, starting with the outermost key and including
* the key to be unset.
* @param bool $key_existed
* (optional) If given, an already defined variable that is altered by
* reference.
*
* Port of NestedArray::unsetValue() from Drupal 8
*
* @see drupal_array_get_nested_value()
* @see drupal_array_set_nested_value()
*/
function drupal_array_unset_nested_value(array &$array, array $parents, &$key_existed = NULL) {
$unset_key = array_pop($parents);
$ref = &drupal_array_get_nested_value($array, $parents, $key_existed);
if ($key_existed && is_array($ref) && array_key_exists($unset_key, $ref)) {
$key_existed = TRUE;
unset($ref[$unset_key]);
}
else {
$key_existed = FALSE;
}
}
答案 1 :(得分:0)
这个怎么样:
eval("\$form['".implode("']['", $arr)."']='';");