1

I have been working on a color palette system where a multidimensional array holds different color palettes. EX:

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

I have a function that should return a color palette item when called but for some reason it's not returning anything. Instead it says "Undefined variable: palette"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>  <."

Any suggestions?

Stella
  • 23
  • 4

2 Answers2

3

The function you wrote does not have the actual palette value.. Just pass the palette you want into the function.

$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 . " <.";

Another way to do this would be to make a simple class in which you could call your palettes.

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;
Joseph_J
  • 3,654
  • 2
  • 13
  • 22
  • I get it!. Thank you. I was not familiar with the $global keyword. I implemented the fix and it works perfectly! I will also try out the class idea, I could see that helping in other areas of my program. – Stella Apr 15 '18 at 02:31
  • Cool glad you got it work.. Classes are very powerful tools. Once you get how they work, you will like them alot. – Joseph_J Apr 15 '18 at 02:32
2

Actually inside your getItem function the variable $palette is not available so either you've to pass it on your getItem function or just add global keyword on your function's $palette variable.

Way 1:

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

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

Way 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

A l w a y s S u n n y
  • 36,497
  • 8
  • 60
  • 103