PHP Pass Array для функции — поддерживать значения по умолчанию, если не задано

У меня есть функция, которая принимает массив аргументов «Опции» для установки флагов для запросов к базе данных. Это выглядит так

function c_SQL($SQL='', $FIELDS=array(), $OPTIONS=array('SINGLEROW'=>false,'foo'=>false,'bar'=>false)) {

}

Я пытаюсь сохранить ключи массива по умолчанию, если я не установил их в своем вызове функции:

$test = c_SQL($query,$fields,array('SINGLEROW'=>true));

Это генерирует ошибку внутри функции c_SQL, когда мы проверяем ключи массива, не указанные (foo и bar).

Есть ли способ сохранить ‘foo’ и ‘bar’, если они не указаны, и изменять ключи только в том случае, если они переданы в функцию?

2

Решение

Вы можете держать значения по умолчанию как константу, и использовать array_merge чтобы применить их к вводу пользователя:

$DEFAULT_OPTIONS = array('SINGLEROW'=>false,'foo'=>false,'bar'=>false);
function c_SQL($sql='', $fields=array(), $options=array()) {
$actual_options = array_merge($default_options, $options);
}
3

Другие решения

Ты можешь использовать array_merge внутри функции для слияния с массивом значений по умолчанию, определенным внутри функции.

function c_SQL($SQL = '', $FIELDS=array(), $OPTIONS = array()) {
$defaults =  array(
'SINGLEROW' => false,
'foo' => false,
'bar' => false
);
$OPTIONS = array_merge($defaults, $OPTIONS);
return $OPTIONS;
}

#  array ( 'SINGLEROW' => false, 'foo' => false, 'bar' => false, )
var_export(c_SQL());

# array ( 'SINGLEROW' => true, 'foo' => false, 'bar' => false, )
var_export(c_SQL(array('SINGLEROW' => true)));
5

Создайте параметры по умолчанию внутри тела функции, а затем объедините новые параметры с array_merge

function c_SQL($SQL='', $FIELDS=array(), $OPTIONS=array()) {
$DEFAULTS = array('SINGLEROW'=>false,'foo'=>false,'bar'=>false);
$OPTIONS = array_merge($DEFAULTS, $OPTIONS);
}
1

Попробуйте назначить $OPTIONS как null или пустой массив, а затем проверьте в функции проверку, является ли он нулевым или нет, если его нуль, тогда назначьте массив. Посмотрите на это здесь ..

function c_SQL($SQL='', $FIELDS=array(), $OPTIONS=NULL) {
if(empty($OPTIONS) {
$OPTIONS=array('SINGLEROW'=>false,'foo'=>false,'bar'=>false)
} else {
$othervalues = array('SINGLEROW'=>false,'foo'=>false,'bar'=>false);
$OPTIONS = array_merge($othervalues, $OPTIONS);
//do something here
}
}
1
По вопросам рекламы [email protected]