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 '';
    }