In order to be able to directly modify array elements within the loop precede $value with &. In that case the value will be assigned by reference.
Use &
with foreach ( $subs as &$subject )
foreach ( $subs as &$subject )
if ( $subject['knowledgeLevel'] == $kl )
unset ($subject);
Or try this:
This form will additionally assign the current element's key to the $key variable on each iteration.
foreach ( $subs as $key => $subject )
if ( $subject['knowledgeLevel'] == $kl )
unset( $subs[$key] );