Search code examples
phparrayscastingtypesarray-intersect

Filtering array with array_intersect() - values are equal as integers, but not as strings


If I've got an array of values that are basically zero-padded string representations of various numbers and another array of integers, will array_intersect() still match elements of different types?

For example, would this work:

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

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

// $intersect would then be = "array(4, 5)"

And if not, what would be the most efficient way to accomplish this? Just loop through and compare, or loop through and convert everything to integers and run array_intersect() after?


Solution

  • $ 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 ( )

    $

    So no, it will not. But if you add

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

    you will get

    $ php test.php

    Array ( [1] => 4 [2] => 5 )