Функция PHP не возвращает значение из многомерного массива

Я работал над системой цветовой палитры, где многомерный массив содержит разные цветовые палитры. EX:

$palette['1']['borderColor'] = "black";
$palette['2']['borderColor'] = "white";

У меня есть функция, которая должна возвращать элемент цветовой палитры при вызове, но по какой-то причине она ничего не возвращает. Вместо этого он говорит «Неопределенная переменная: палитра» EX:

$palette['1'] = array(
"borderColor"=> "#222222",
"divColor1"=> "#00f2ff",
"divColor2"=> "#222222",
"headerColor"=> "rgba(38, 38, 38, 0.5)",
"color1"=> "#00f2ff",
"color2"=> "#e9ffdd");

function getItem($number, $item) {
return $palette[$number][$item];
}

$borderColor = getItem('1', 'borderColor');
echo "borderColor is> " . $borderColor . " <.";

//returns "borderColor is>  <."

Какие-либо предложения?

1

Решение

Функция, которую вы написали, не имеет фактического значения палитры. Просто передайте нужную палитру в функцию.

$palette['1'] = array(
"borderColor"=> "#222222",
"divColor1"=> "#00f2ff",
"divColor2"=> "#222222",
"headerColor"=> "rgba(38, 38, 38, 0.5)",
"color1"=> "#00f2ff",
"color2"=> "#e9ffdd");

function getItem($palette, $number, $item) {
return $palette[$number][$item];
}

$borderColor = getItem($palette,'1', 'borderColor');
echo "borderColor is> " . $borderColor . " <.";

Другой способ сделать это — создать простой класс, в котором вы можете вызывать свои палитры.

class Palette {

public function __construct($palette){

$this->borderColor  = $palette['borderColor'];
$this->divColor1    = $palette['divColor1'];
$this->divColor2    = $palette['divColor2'];
$this->headerColor  = $palette['headerColor'];
$this->color1       = $palette['color1'];
$this->color2       = $palette['color2'];

}


}

$palette['1'] = array(
"borderColor"=> "#222222",
"divColor1"=> "#00f2ff",
"divColor2"=> "#222222",
"headerColor"=> "rgba(38, 38, 38, 0.5)",
"color1"=> "#00f2ff",
"color2"=> "#e9ffdd");

$black = new Palette($palette['1']);
$white = new Palette($palette['2']);

echo $black->borderColor;
echo $white->borderColor;
3

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

На самом деле внутри вашей функции getItem переменная $ палитра недоступен, так что либо вы должны передать его на GetItem функция или просто добавить Глобальный Ключевое слово на вашей функции $ палитра переменная.

Способ 1:

function getItem($palette, $number, $item) {
return $palette[$number][$item];
}

$borderColor = getItem($palette,'1', 'borderColor');

Способ 2:

function getItem($number, $item) {
global $palette; // it will be available here
return $palette[$number][$item];
}

$borderColor = getItem('1', 'borderColor');

DEMO https://eval.in/988491

2

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