code: protected function describeArrayDifference($first, $second, $identical)
      {
          if (! is_array($second)) {
              return $this->describeGenericDifference($first, $second);
          }
          if (! $this->isMatchingKeys($first, $second, $identical)) {
              return sprintf(
                  'as key list [%s] does not match key list [%s]',
                  implode(', ', array_keys($first)),
                  implode(', ', array_keys($second))
              );
          }
          foreach (array_keys($first) as $key) {
              if ($identical && ($first[$key] === $second[$key])) {
                  continue;
              }
              if (! $identical && ($first[$key] == $second[$key])) {
                  continue;
              }
  
              return sprintf(
                  'with member [%s] %s',
                  $key,
                  $this->describeDifference($first[$key], $second[$key], $identical)
              );
          }
  
          return '';
      }
docs: Creates a human readable description of the difference between two arrays.
  
  @param array $first         First array.
  @param mixed $second        Array to compare with.
  @param bool $identical   If true then type anomolies count.
  
  @return string              Human readable description.