使in_array不能在数值和alpha值之间进行转换

时间:2017-04-07 10:50:03

标签: php

我希望在这些情况下使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]);

最简单的解决办法是什么?

2 个答案:

答案 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)