ArrayUtils::inArray should use strict in_array? #41
Description
Related: zendframework/zend-form#18
In Zend\Form\View\Helper\FormSelect
ArrayUtils::inArray
is called with the strict parameter false
. This causes an issue with string matching ('1.1' and '1.10' treated equivalent):
<?php
$needle = '1.10';
$haystack = ['1.1'];
assert(in_array($needle, $haystack) === false);
// PHP Warning: assert(): Assertion failed in <file> on line 5
(3v4l: https://3v4l.org/HKM8Q)
Simply changing FormSelect to use strict=true breaks an existing test which uses integer keys in the value options array.
Since ArrayUtils::inArray
uses string casting to work around in_array
's wonky non-strict behaviour, shouldn't the call to in_array
always have strict=true?
diff --git a/src/ArrayUtils.php b/src/ArrayUtils.php
index 17e3ae3..69b9721 100644
--- a/src/ArrayUtils.php
+++ b/src/ArrayUtils.php
@@ -199,7 +199,7 @@ abstract class ArrayUtils
}
}
}
- return in_array($needle, $haystack, $strict);
+ return in_array($needle, $haystack, true);
}
/**
I've tested this change here (all tests pass) and against zend-form
(where it fixes the reported issue).
What's the protocol for testing changes to packages which may have knock-on effects on other packages? Pull every repo that has a dependency on stdlib, apply the patch, and run the tests?