Передача данных в function

213
07 июля 2018, 21:10

В общем, есть такой код:

$arr =["1","2","6"];
function test($a,$z)
{
$minus=$z[1]-$a;
return $minus;
}
echo test(2,$arr);

Возможно ли сделать что бы не всегда указывать на $arr? Типа так:

$arr =["1","2","6"];
function test($a)
{
$minus=$arr[1]-$a;
return $minus;
}
echo test(2);

Или как то по другом можно?

Answer 1

Можно в теле функции объявить массив $arr глобальным:

$arr = [1, 2, 6];
echo test(2);
function test($a) {
    global $arr;
    return $arr[1] - $a;
}

Но это не считается хорошей практикой.

Если у вас PHP не ниже версии 7, то ещё можно объявить константу со структурой массива (константы имеют глобальную область видимости):

const ARR = [1, 2, 6];
echo test(2);
function test($a) {
    return ARR[1] - $a;
}

Если версия с константами не подходит, можно формировать для передачи в функцию массив, добавляя в первый элемент то значение, с которым нужно работать в теле функции. А в теле функции - извлекать из массива этот первый элемент:

$arr = [1, 2, 6];
array_unshift($arr, 2);
echo test($arr);
function test($arr) {
    $a = array_shift($arr);
    return $arr[1] - $a;
}

Ну и ещё один из вариантов - создать ещё одну пользовательскую функцию, которая будет возвращать массив, и вызывать эту функцию в теле первой функции:

echo test(2);
function test($a) {
    return get_array()[1] - $a;
}
function get_array() {
    return [1, 2, 6];
}
READ ALSO
Изменение битрейта аудио

Изменение битрейта аудио

Помогите, как сделать при помощи JS и PHP изменение битрейта аудио? Чтобы при загрузке аудио файла на сервер автоматически битрейт изменялся...

203
Помогите написать алгоритм!

Помогите написать алгоритм!

Задача о трех переговорных В офисе есть 3 переговорных комнаты: Aztec,Navajo и CherokeeВ переговорной Aztec помещается до 8 человек, есть проектор и маркерная...

192
Изменить путь в 'хлебных крошках'

Изменить путь в 'хлебных крошках'

Проблема с 'хлебными крошками' в WordPressЕсть страница, на которой выводятся статьи

266