Как передать массив в качестве необязательного параметра и перебрать его?

Я пытаюсь изменить phpgraphlib так, чтобы я мог генерировать легенду, когда используются несколько цветов панели. Я добавил массив с цветами в качестве необязательного параметра в generateLegend (), но, похоже, он не работает. Я не знаю что не так. У меня нет опыта работы с PHP, но мне показалось, что передача массива в качестве необязательного параметра должна быть возможной
Вот мой код:

protected function generateLegend(array $colors = array())
{
// here is some code
if($this->bool_multi_color_bars) {
// gets here
if (!empty($colors)) {
// doesn't get here
$index = 0;
foreach($colors as $key => $item) {
// here is some code that creates the colored boxes
$index++;
}
}
}
}

А вот код, который вызывает функцию:

$colors = array();
foreach($data as $key => $value) {
if($value < 3) {
$colors[$key] = 'green';
}
elseif($value < 8) {
$colors[$key] = 'orange';
}
else {
$colors[$key] = 'red';
}
}
$graph->setBarColors($colors);
$graph->setLegend(true, $colors);
$graph->createGraph();

РЕДАКТИРОВАТЬ: generateLegend () вызывается с следующим кодом:

if ($this->bool_legend) {
$this->generateLegend();
}

Для удобства чтения я оставил большую часть кода, но я вижу, что метод вызывается (поэтому я добавил комментарии, где код получает и нет)

-1

Решение

Я не уверен, что вы на самом деле хотите. То, что вы сейчас видите, — это ожидаемое поведение empty, Массив без элементов является пустой.

var_dump(empty([])); // true

Если вы хотите проверить, был ли установлен необязательный параметр, вы можете использовать func_num_args,

if (func_num_args() > 0) {
// $colors was set
}

Или используйте другой аргумент по умолчанию и проверьте тип.

function foo(array $bar = null) {
if ($bar === null) {
// ...
}
}
0

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

Других решений пока нет …

По вопросам рекламы [email protected]