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()?


person Wilco    schedule 03.11.2008    source источник


Ответы (2)


$ кошка > test.php

<?php
$arrayOne = array('0003', '0004', '0005');
$arrayTwo = array(4, 5, 6);

$intersect = array_intersect($arrayOne, $arrayTwo);

print_r($intersect );

?>

$ php test.php

Множество ( )

$

Так что нет, не будет. Но если вы добавите

foreach($arrayOne as $key => $value)
{
   $arrayOne[$key] = intval($value);
}

ты получишь

$ php test.php

Массив ( [1] => 4 [2] => 5 )

person Zak    schedule 03.11.2008

Из 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"

person Davide Gualano    schedule 03.11.2008
comment
И я думаю, что следует упомянуть, что (string)"5" === (string)5. - person steven; 15.11.2017