PHP

Исправьте синтаксическую ошибку в программе на PHP

$x = [1, 2, 3, 4];
$y = [5, 6, 7, 8];

$F = (1 - sqrt(array_sum(array_map(fn($a, $b)=>($a * $b) ** 2, $x, $y)))) /
((count($x) ** 2 + 1) * (array_sum(array_map('sqrt', $x)) -
array_sum(array_map(fn($a) => $a ** 2, $y))));

echo $F;
Ошибка:PHP Parse error: syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ',' or ')' in /home/main.php on line 13
Данная ошибка возникает из-за того, что стрелка => используется внутри анонимной функции, которая передается в качестве параметра функции array_map(). В PHP версии ниже 7.4, такой синтаксис не поддерживается. Для исправления ошибки, необходимо заменить стрелку => на ключевое слово use перед переменными, которые нужно использовать внутри анонимной функции. Вот исправленный код:

$x = [1, 2, 3, 4];
$y = [5, 6, 7, 8];

$F = (1 - sqrt(array_sum(array_map(function($a, $b) use ($x, $y) { return ($a * $b) ** 2; }, $x, $y)))) /
((count($x) ** 2 + 1) * (array_sum(array_map('sqrt', $x)) -
array_sum(array_map(function($a) { return $a ** 2; }, $y))));

echo $F;

Здесь мы использовали ключевое слово use перед переменными $x и $y внутри первой анонимной функции и перед переменной $y во второй анонимной функции. Это позволяет использовать эти переменные внутри функций, несмотря на то, что они определены вне функций.
Азамат Дюсенбаев
Азамат Дюсенбаев
11 256
Лучший ответ
Синтаксическая ошибка заключается в использовании стрелочной функции (arrow function) fn вместо обычной функции в одном из вызовов array_map. Функция fn появилась только в PHP 7.4, поэтому, если ваша версия PHP более старая, этот синтаксис не будет работать.

Варианты решения:

Если ваша версия PHP 7.4 или более новая, то можно оставить стрелочную функцию fn и обновить версию PHP на вашем сервере.

 $x = [1, 2, 3, 4];   
$y = [5, 6, 7, 8];

$F = (1 - sqrt(array_sum(array_map(function($a, $b) { return ($a * $b) ** 2; }, $x, $y)))) /
((count($x) ** 2 + 1) * (array_sum(array_map('sqrt', $x)) -
array_sum(array_map(function($a) { return $a ** 2; }, $y))));

echo $F;
SR
Sanya Rik
9 174