PHP array_intersect() - как он обрабатывает разные типы?
Если у меня есть массив значений, которые в основном представляют собой нулевые заполненные строковые представления различных чисел и другой массив целых чисел, array_intersect()
все еще соответствуют элементы разных типов?
Например, будет ли это работать:
$arrayOne = array('0003', '0004', '0005');
$arrayTwo = array(4, 5, 6);
$intersect = array_intersect($arrayOne, $arrayTwo);
// $intersect would then be = "array(4, 5)"
И если нет, то какой будет самый эффективный способ сделать это? Просто переберите и сравните, или переберите и преобразуйте все в целые числа и запустите array_intersect()
после?
2 ответа
Решение
$ cat> test.php
<?php
$arrayOne = array('0003', '0004', '0005');
$arrayTwo = array(4, 5, 6);
$intersect = array_intersect($arrayOne, $arrayTwo);
print_r($intersect );
?>
$ php test.php
Array ()
$
Так что нет, не будет. Но если вы добавите
foreach($arrayOne as $key => $value)
{
$arrayOne[$key] = intval($value);
}
ты получишь
$ php test.php
Массив ( [1] => 4 [2] => 5)
С http://it2.php.net/manual/en/function.array-intersect.php:
Note: Two elements are considered equal if and only if (string) $elem1 === (string) $elem2. In words: when the string representation is the same.
В вашем примере $intersect будет пустым массивом, потому что 5!== "005" и 4!== "004"