我希望在这些情况下使in_array返回TRUE:
in_array(0, [0]);
in_array(0, ['0']);
in_array('0', [0]);
in_array('0', ['0']);
但与此同时,在以下情况下返回FALSE:
in_array(0, ['A']);
in_array('0', ['A']);
in_array('A', ['0']);
in_array('A', [0]);
in_array(1, [true]);
最简单的解决办法是什么?
答案 0 :(得分:0)
除了
之外,几乎所有示例都有效in_array(0, ['A']);
但是,您可以将整数值转换为字符串:
in_array(strval(0), ['A']);
即使数组中有数字,这也会有效:
in_array('0', [0]); // returns true
或者:
$needle = 'A';
$array = [0];
in_array(strval($needle), array_map(function($value) { return strval($value); }, $array));
或者:
$needle = 'A';
$array = [0];
$mapped_array = array_map(
function($value) {
if (is_numeric($value))
return strval($value);
else
return $value;
},
$array
);
in_array(strval($needle), $mapped_array, true);
答案 1 :(得分:0)
array_intersect
按预期工作
php > var_dump((bool) array_intersect([0], [0]));
bool(true)
php > var_dump((bool) array_intersect([0], ['0']));
bool(true)
php > var_dump((bool) array_intersect(['0'], [0]));
bool(true)
php > var_dump((bool) array_intersect(['0'], ['0']));
bool(true)
php > var_dump((bool) array_intersect(['0'], ['A']));
bool(false)
php > var_dump((bool) array_intersect(['0'], ['A']));
bool(false)
php > var_dump((bool) array_intersect(['A'], ['0']));
bool(false)
php > var_dump((bool) array_intersect(['A'], [0]));
bool(false)
php > var_dump((bool) array_intersect([1], [true]));
bool(true)