Alter Exposed filter form
What you obtain from that code is exactly what you should obtain.

The values you are getting from that control statement are:


$form['tid']['#options']['All'] is a string, and not an object. Trying to access $form['tid']['#options']['All']-&gt;option gives you a warning about accessing a property for something that is not an object.
$form['tid']['#options'][0] is an object, and it doesn't raise an error, but $form['tid']['#options'][0]-&gt;option is an array, and print $form['tid']['#options'][0]-&gt;option converts it in a string. That is why you see Array.
The same is true for $form['tid']['#options'][1].


To remove the array element that contains 'Age 12 - 14' from $form['tid']['#options'], I would use the following code.

foreach ($form['tid']['#options'] as $index =&gt; $tid) {
  if (is_object($tid) &amp;&amp; !empty($tid-&gt;option) &amp;&amp; is_array($tid-&gt;option) &amp;&amp; in_array('Ages 12-14', $tid-&gt;option)) {
    unset($form['tid']['#options'][$index]);
  }
}


Notice that in_array() is case-sensitive. If you are searching for 'Age 12 - 14', but the string is 'age 12 - 14', the code doesn't remove the option.