/**
 * Deep clean a nested array.
 *
 * @param array $struct
 * @return array cleaned $struct
 */
function _fieldmanager_sanitize_deep($struct)
{
    if (is_object($struct)) {
        $object = (array) $struct;
    } elseif (!is_array($struct)) {
        return sanitize_text_field($struct);
    }
    $new_struct = array();
    foreach ($struct as $k => &$v) {
        $new_struct[sanitize_text_field($k)] = _fieldmanager_sanitize_deep($v);
    }
    return $new_struct;
}
 /**
  * This fires on save_post to store the revision_meta for diffing and
  * autosaves.
  *
  * @param  int $post_id Post ID
  * @return void
  */
 public function action__save_post($post_id)
 {
     if (get_post_type($post_id) != $this->post_type || defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
         return;
     }
     $meta = array();
     foreach ($this->meta_fields as $key => $label) {
         if (isset($_POST[$key])) {
             $meta[$key] = _fieldmanager_sanitize_deep($_POST[$key]);
         } elseif ($value = get_post_meta($post_id, $key, true)) {
             $meta[$key] = $value;
         }
     }
     if (!empty($meta)) {
         update_post_meta($post_id, $this->revision_meta_key, $this->to_json($meta));
     }
 }