Opened 6 months ago

Last modified 6 months ago

#22409 new enhancement

add multiple selected options support to selected() function

Reported by: bitacre Owned by:
Priority: normal Milestone: Awaiting Review
Component: Validation Version: 3.4.2
Severity: minor Keywords:
Cc:

Description

The current selected() function returns selected="selected" if two strings match, but does not correctly handle arrays that result from select options that have multiple="multiple" enabled (it just checks the first item in the array by forcing a string type).

I suggest either adding correct handling of arrays or alternatively adding a separate multiselected() function to handle this situation.

This could be accomplished by altering the current __checked_selected_helper() function to this:

function __checked_selected_helper( $helper, $current, $echo, $type ) {
  if( is_array( $helper ) && in_array( $current, $helper, true ) )
    $result = " $type='$type'";
  elseif ( (string) $helper === (string) $current )
    $result = " $type='$type'";
  else
    $result = '';
	
  if ( $echo )
    echo $result;

  return $result;
}

I've just added the first 2 lines and changed the first if to an elseif.

Change History (1)

This isn't the most efficient way to do this, but I just wanted to demonstrate the point that in_array() should be used instead of === when the $helper is an array.

Last edited 6 months ago by bitacre (previous) (diff)
Note: See TracTickets for help on using tickets.