
     **********************************************************
     *  ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN!  *
     **********************************************************

SYNOPSIS:
    int member_array(mixed item, mixed *arr)
    int member_array(mixed item, string arr)

DESCRIPTION:
    DO NOT USE THIS EFUN - IT HAS BEEN REMOVED FROM THE DRIVER!
    Returns the index of the first occurence of item in array arr,
  	or occurence of a character in a string. If not found, then -1
  	is returned.
        
    If you want to search through an alist, use assoc() because
    member_array() is good for unsorted but assoc() is faster for
    sorted arrays.
        
    In LDMud this efun is temporarily a simulated efun until is finally
    droppped.

HISTORY
    Superseeded by member().
    Removed in LDMud 3.3.

SEE ALSO:
        alists(LPC), mappings(LPC), assoc(E), slice_array(E)

11.11.2006 Zesstra
