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 '';
    }
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 '';
    }
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 '' ; }
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.
Creates a human readable description of the difference between two arrays .