fewbricks\acf\field_group::set_unique_keys PHP Method

set_unique_keys() private method

In order to create unique keys, we prepend teh key of a parent to its kids and so on down the field settings tree.
private set_unique_keys ( $fields, $base_key ) : mixed
$fields
$base_key
return mixed
    private function set_unique_keys($fields, $base_key)
    {
        foreach ($fields as $field_key => $field_settings) {
            // Store the original key to ease debugging
            $fields[$field_key]['original_key'] = $fields[$field_key]['key'];
            // Start off new key with base key
            $new_key = $base_key;
            // Lets add the brick key if we have one. This will only be set if
            // the field is part of a brick (which is a concept added by Fewbricks and of which ACF has no idea)
            if (isset($field_settings['brick_key'])) {
                $new_key .= '_' . $field_settings['brick_key'];
            }
            // Lets store the new key we have built so far for future needs
            $new_base_key = $new_key;
            // Add the current fields key to complete the new key
            $new_key .= '_' . $fields[$field_key]['key'];
            // Give the field the brand new key
            $fields[$field_key]['key'] = $new_key;
            // Lets keep the array key of any item that we should traverse down.
            $field_settings_rabbit_hole_array_key = $this->get_rabbit_hole_array_key($field_settings);
            // Do we have a key to go down?
            if ($field_settings_rabbit_hole_array_key !== false) {
                // Recursion!
                $fields[$field_key][$field_settings_rabbit_hole_array_key] = $this->set_unique_keys($field_settings[$field_settings_rabbit_hole_array_key], $new_key);
            }
            // Lets fix the conditional logic
            if (isset($field_settings['conditional_logic']) && !empty($field_settings['conditional_logic'])) {
                foreach ($field_settings['conditional_logic'] as $lvl_1_key => $lvl_1_value) {
                    foreach ($field_settings['conditional_logic'][$lvl_1_key] as $lvl_2_key => $lvl_2_value) {
                        $fields[$field_key]['conditional_logic'][$lvl_1_key][$lvl_2_key]['field'] = $new_base_key . '_' . $field_settings['conditional_logic'][$lvl_1_key][$lvl_2_key]['field'];
                    }
                }
            }
        }
        return $fields;
    }