Переношу тяжёлый клиентский код на сервер и у меня возникли проблемы. Есть функция, написанная в JavaScript:
return Object.keys(locationData).reduce((prev, curr) => {
var prevDistance = locationDistance(targetLocation, locationData[prev]),
currDistance = locationDistance(targetLocation, locationData[curr]);
return (prevDistance < currDistance) ? prev : curr;
});
Написал код на PHP:
function nearestsReduce($prev, $curr) {
global $targetLocGlobal, $locationDataGlobal;
$prevDistance = locationDistance($targetLocGlobal, $locationDataGlobal[$prev]);
$currDistance = locationDistance($targetLocGlobal, $locationDataGlobal[$curr]);
if($prevDistance < $currDistance) {
return $prev;
}
return $curr;
}
function closestLocation($targetLocation, $locationData) {
$all_keys = array_keys($locationData);
return array_reduce($all_keys, 'nearestsReduce');
}
Собрал все ключи, отправил в функцию, а в самой функции уже выполняю всё то же, что и в JavaScript, но почему-то получаю ошибку:
Notice: Undefined index: in
При чём, ошибка так и выводится - с пустым индексом. И я не могу понять, какой именно индекс не объявлен. Ошибка указывает на эту строку:
$prevDistance = locationDistance($targetLocGlobal, $locationDataGlobal[$prev]);
В документации написано о первом параметре функции обратного вызова (ваша nearestsReduce) для array_reduce:
Содержит результирующее значение с предыдущей итерации; в случае же первой итерации содержит значение параметра initial.
initial - третий параметр array_reduce, он у вас не задан, и по умолчанию null. При первом же вызове вашей функции обратного вызова $prev получает значение null. Такой индекс в массиве locationDataGlobal не существует.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости