phparraysfilterarray-difference

array_diff() not returning differences found in the second array


I've read some tutorials on here but none of them return what I need. I have two arrays.

$arrayA = array(1960,1961,1963,1962,1954,1953,1957,1956,1955);
$arrayB = array(1949,1960,1961,1963,1962,1954,1953,1957,1956,1955);

However, when I run array_diff, it returns an empty array.

$diff = array_diff($arrayA, $arrayB);

But I'd like it to return 1949. What's the error in my code?

edit: since switching the variables won't work, i did var_dump for the 3 arrays (A, B, and diff) and here's the pastebin http://pastebin.com/tn1dvCs3


Solution

  • array_diff works by finding the elements in the first array that aren't in the second, per the documentation. Try inverting your call:

    $diff = array_diff($arrayB, $arrayA);
    

    To see this in action, lets look at a more manageable but equivalent example:

    $arrayA = array(1960);
    $arrayB = array(1949,1960);
    
    $diff = array_diff($arrayB, $arrayA);
    var_dump($diff);
    

    This yields:

    [mylogin@aserver ~]$ vim test.php
    [mylogin@aserver ~]$ php test.php
    array(1) {
      [0]=>
      int(1949)
    }
    

    Please note that this uses a minimal demonstrative example of the functionality you're attempting to get. By discarding unnecessary data in your actual implementation you can more quickly zero in on the problem you're having.