Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I compare the rows in two 2d arrays? [duplicate]

It seems that every PHP function I read about for comparing arrays (array_diff(), array_intersect(), etc) compares for the existence of array elements.

Given two multidimensional arrays with identical structure, how would you list the differences in values?

Example

Array 1

[User1] => Array ([public] => 1
                [private] => 1
                [secret] => 1
               ) 
[User2] => Array ([public] => 1
                [private] => 0
                [secret] => 0
               )

Array 2

[User1] => Array ([public] => 1
                [private] => 0
                [secret] => 1
               ) 
[User2] => Array ([public] => 1
                [private] => 0
                [secret] => 0
               )

Difference

[User1] => Array ([public] => 1
                [private] => 0 //this value is different
                [secret] => 1
               )

So my result would be - "Of all the users, User1 has changed, and the difference is that private is 0 instead of 1."

like image 824
Nathan Long Avatar asked Dec 31 '25 23:12

Nathan Long


1 Answers

One way is to write a function to do something similar to this..

function compareArray ($array1, $array2)
{
  foreach ($array1 as $key => $value)
  {
    if ($array2[$key] != $value)
    {
      return false;
    }
  }

  return true;
}

You could easily augment that function to return an array of differences in the two..

Edit - Here's a refined version that more closely resembles what you're looking for:

function compareArray ($array1, $array2)
{
  var $differences;

  foreach ($array1 as $key => $value)
  {
    if ($array2[$key] != $value)
    {
      $differences[$key][1] = $value;
      $differences[$key][2] = $array2[$key];
    }
  }

  if (sizeof($differences) > 0)
  {
    return $differences;
  }
  else
  { 
    return true;
  }
}
like image 73
Ian P Avatar answered Jan 02 '26 13:01

Ian P