PHP array_intersect () - как он обрабатывает разные типы? - PullRequest
1 голос
/ 03 ноября 2008

Если у меня есть массив значений, которые в основном представляют собой нулевые заполненные строковые представления различных чисел и другой массив целых чисел, будет ли 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 ]

4 голосов
/ 03 ноября 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"

3 голосов
/ 03 ноября 2008

$ 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

Массив ( )

$

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

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

вы получите

$ php test.php

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

...