public static bool Ceq(PhpValue x, PhpValue y) => x.StrictEquals(y);
/// <summary> /// Searches the array for a given value and returns the corresponding key if successful. /// </summary> /// <param name="needle">The value to search for.</param> /// <param name="haystack">The <see cref="PhpArray"/> where to search.</param> /// <param name="strict">Whether strict comparison method (operator ===) is used for comparing values.</param> /// <returns>The key associated with the <paramref name="needle"/> or <B>false</B> if there is no such key.</returns> /// <exception cref="PhpException"><paramref name="haystack"/> is a <B>null</B> reference (Warning).</exception> public static PhpValue array_search(PhpValue needle, PhpArray haystack, bool strict = false) { // result needn't to be deeply copied because it is a key of an array // if (haystack == null) { // TODO: PhpException.ArgumentNull("haystack"); return PhpValue.False; } // using operator ===: if (strict) { using (var enumerator = haystack.GetFastEnumerator()) while (enumerator.MoveNext()) { // TODO: dereferences value (because of StrictEquality operator): if (needle.StrictEquals(enumerator.CurrentValue)) return PhpValue.Create(enumerator.CurrentKey); } } else { // using operator ==: using (var enumerator = haystack.GetFastEnumerator()) while (enumerator.MoveNext()) { // note: comparator manages references well: if (needle.Equals(enumerator.CurrentValue)) return PhpValue.Create(enumerator.CurrentKey); } } // not found: return PhpValue.False; }