aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-php-shim/src/array.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe-php-shim/src/array.rs')
-rw-r--r--crates/shirabe-php-shim/src/array.rs24
1 files changed, 13 insertions, 11 deletions
diff --git a/crates/shirabe-php-shim/src/array.rs b/crates/shirabe-php-shim/src/array.rs
index 29338aae..86a78dd2 100644
--- a/crates/shirabe-php-shim/src/array.rs
+++ b/crates/shirabe-php-shim/src/array.rs
@@ -585,18 +585,20 @@ fn php_slice_bounds(len: i64, offset: i64, length: Option<i64>) -> (usize, usize
(start as usize, end as usize)
}
-pub fn in_array(needle: PhpMixed, haystack: &PhpMixed, strict: bool) -> bool {
- let values: Vec<&PhpMixed> = match haystack {
- PhpMixed::List(items) => items.iter().collect(),
- PhpMixed::Array(map) => map.values().collect(),
- _ => return false,
- };
+pub fn in_array_strict<'a>(
+ needle: impl Into<PhpMixed>,
+ haystack: impl IntoIterator<Item = &'a PhpMixed>,
+) -> bool {
+ let needle = needle.into();
+ haystack.into_iter().any(|value| *value == needle)
+}
- if strict {
- values.iter().any(|value| **value == needle)
- } else {
- values.iter().any(|value| loose_eq(value, &needle))
- }
+pub fn in_array_loose<'a>(
+ needle: impl Into<PhpMixed>,
+ haystack: impl IntoIterator<Item = &'a PhpMixed>,
+) -> bool {
+ let needle = needle.into();
+ haystack.into_iter().any(|value| loose_eq(value, &needle))
}
/// PHP numeric-string-aware conversion to a number, used by loose comparison.