Правый путь https://github.com/yapro/helpers/blob/master/src/ArrayHelper.php
class ArrayHelper
{
/**
* @param array $array1
* @param array $array2
* @return array
*/
function arrayDiffAssocMultidimensional(array $array1, array $array2): array
{
$difference = [];
foreach ($array1 as $key => $value) {
if (is_array($value)) {
if (!array_key_exists($key, $array2)) {
$difference[$key] = $value;
} elseif (!is_array($array2[$key])) {
$difference[$key] = $value;
} else {
$multidimensionalDiff = $this->arrayDiffAssocMultidimensional($value, $array2[$key]);
if (count($multidimensionalDiff) > 0) {
$difference[$key] = $multidimensionalDiff;
}
}
} else {
if (!array_key_exists($key, $array2) || $array2[$key] !== $value) {
$difference[$key] = $value;
}
}
}
return $difference;
}
}
1) Функция определена здесь :
// startTimer adds t to the timer heap.
//go:linkname startTimer time.startTimer
func startTimer(t *timer) {
if raceenabled {
racerelease(unsafe.Pointer(t))
}
addtimer(t)
}
2) Объявление функций :
Объявление функции может опустить тело. Такое объявление предоставляет подпись для функции, реализованной вне Go, например, процедуры сборки.
3) Не каждый язык программирования может полностью выражать свое собственное время выполнения (например, C). Части выполнения Run и стандартная библиотека находятся на C, части находятся в сборке, а некоторые другие находятся в
.goc
, что является недостаточно хорошо документированным гибридом Go и C.
.goc
. – kostix 20 February 2013 в 09:30