array(), 'fields' => array(), ); foreach ( $schema['steps'] as $step ) { if ( ! self::matches( isset( $step['show_if'] ) ? $step['show_if'] : null, $known ) ) { continue; } $visible['steps'][] = $step['id']; foreach ( $step['fields'] as $field ) { if ( ! self::matches( isset( $field['show_if'] ) ? $field['show_if'] : null, $known ) ) { continue; } $visible['fields'][] = $field['id']; if ( isset( $answers[ $field['id'] ] ) ) { $known[ $field['id'] ] = $answers[ $field['id'] ]; } } } return $visible; } /** * Turns an answer into the list of non-empty strings it holds. * * @param mixed $answer Answer: string, list of strings, or address. * @return string[] */ private static function values( $answer ) { if ( null === $answer ) { return array(); } $values = array(); foreach ( (array) $answer as $value ) { if ( is_scalar( $value ) && '' !== trim( (string) $value ) ) { $values[] = (string) $value; } } return $values; } }