Переношу тяжёлый клиентский код на сервер и у меня возникли проблемы. Есть функция, написанная в 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 не существует.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Как создать API на сайте, написанном на laravel 56? В документации на русском только описана API-аутентификация
Я работаю на php 54
Пытаюсь реализовать вывод 4-х значных значений имея набор символов : $a = array('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');