# Method search()

Method search

  `int search(string haystack, string|int needle, int|void start)`
  `int search(array haystack, mixed needle, int|void start)`
  `mixed search(mapping haystack, mixed needle, mixed|void start)`
  `mixed search(object haystack, mixed needle, mixed|void start)`

Description

  Search for needle in haystack. Return the position of needle in haystack or `-1` if not found.

  If the optional argument start is present search is started at this position.

  `haystack` can have any of the following types:

  `string` | When haystack is a string needle must be a string or an int, and the first occurrence of the string or int is returned.
  `array` | When haystack is an array, needle is compared only to one value at a time in haystack.
  `mapping` | When haystack is a mapping, search() tries to find the index connected to the data needle. That is, it tries to lookup the mapping backwards. If needle isn't present in the mapping, zero is returned, and zero_type() will return 1 for this zero.

  `object`

  When haystack is an object implementing lfun::_search(), the result of calling lfun::_search() with needle will be returned.

  If haystack is an object that doesn't implement lfun::_search() it is assumed to be an Iterator, and implement Iterator()->index(), Iterator()->value(), and Iterator()->next(). search() will then start comparing elements with `==() until a match with needle is found. If needle is found haystack will be advanced to the element, and the iterator index will be returned. If needle is not found, haystack will be advanced to the end (and will thus evaluate to false), and a zero with zero_type 1 will be returned.

Note

  If start is supplied to an iterator object without an lfun::_search(), haystack will need to implement Iterator()->set_index().

Note

  For mappings and object UNDEFINED will be returned when not found. In all other cases `-1` will be returned when not found.

See also

  indices(), values(), zero_type(), has_value(), has_prefix(), has_suffix()