PHP 函数未从多维数组返回值
PHP function not returning a value from multidimensional array
我一直在开发一个调色板系统,其中一个多维数组包含不同的调色板。例如:
$palette['1']['borderColor'] = "black";
$palette['2']['borderColor'] = "white";
我有一个函数,在调用时应该 return 一个调色板项目,但由于某种原因它没有 return 任何东西。相反,它说 "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> <."
有什么建议吗?
您编写的函数没有实际的调色板值。只需将您想要的调色板传递给函数即可。
$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,您可以在其中调用您的调色板。
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;
实际上在您的 getItem 函数中,变量 $palette 不可用,因此您必须将它传递给您的 getItem 函数,或者只需在函数的 $palette 变量上添加 global 关键字即可。
方式一:
function getItem($palette, $number, $item) {
return $palette[$number][$item];
}
$borderColor = getItem($palette,'1', 'borderColor');
方式二:
function getItem($number, $item) {
global $palette; // it will be available here
return $palette[$number][$item];
}
$borderColor = getItem('1', 'borderColor');
我一直在开发一个调色板系统,其中一个多维数组包含不同的调色板。例如:
$palette['1']['borderColor'] = "black";
$palette['2']['borderColor'] = "white";
我有一个函数,在调用时应该 return 一个调色板项目,但由于某种原因它没有 return 任何东西。相反,它说 "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> <."
有什么建议吗?
您编写的函数没有实际的调色板值。只需将您想要的调色板传递给函数即可。
$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,您可以在其中调用您的调色板。
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;
实际上在您的 getItem 函数中,变量 $palette 不可用,因此您必须将它传递给您的 getItem 函数,或者只需在函数的 $palette 变量上添加 global 关键字即可。
方式一:
function getItem($palette, $number, $item) {
return $palette[$number][$item];
}
$borderColor = getItem($palette,'1', 'borderColor');
方式二:
function getItem($number, $item) {
global $palette; // it will be available here
return $palette[$number][$item];
}
$borderColor = getItem('1', 'borderColor');