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?

2
  • You need to add global $palette; to your function in order to have access to it. Commented Apr 15, 2018 at 2:11
  • Possible duplicate of Scope of PHP function Commented Apr 21, 2018 at 6:09

2 Answers 2

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;
Sign up to request clarification or add additional context in comments.

2 Comments

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.
Cool glad you got it work.. Classes are very powerful tools. Once you get how they work, you will like them alot.
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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.