我有一段PHP代码试图在函数中添加一个命名的key=>value
对。它只是作为直接代码编写时工作正常(character_name和character_color是文件中正常工作的现有函数。他们只是从现有数据中提取字符串):
$name = character_name($character_id);
$color = character_color($character_id);
$array = array("character"=>$name, "color"=>$color);
$characters_array['character']=$array;
但是,当我尝试将其包装在函数中并将键值命名为变量时,它不再起作用并生成空值:
function character_array($key,$character_id) {
$name = character_name($character_id);
$color = character_color($character_id);
$array = array("character"=>$name, "color"=>$color);
$GLOBALS["characters_array"][$key]=$array;
}
我知道我的问题在于函数的最后一行,我怀疑这两组方括号是问题所在,但我不知道的是如何正确地写出最后一行,以便我可以在全局数组中添加一个名为key=>value
的对。我哪里错了?
答案 0 :(得分:0)
尝试使用函数内的全局变量的引用
function character_array($key,$character_id) {
global $characters_array;
$name = character_name($character_id);
$color = character_color($character_id);
$array = array("character"=>$name, "color"=>$color);
$characters_array[$key]=$array;
}
答案 1 :(得分:0)
你有两个选项可以让它工作,但我会避免依赖全局变量。
我认为最好的方法是让函数返回您期望的数据,然后将其分配到您想要的位置。到目前为止,这是最清楚的事情:
function character_array($key,$character_id) {
$name = character_name($character_id);
$color = character_color($character_id);
$array = array("character"=>$name, "color"=>$color);
return $array;
}
//Assign it to the array by calling the function.
$GLOBALS["characters_array"] = character_array("foo", "bar");
另一种选择是将everthing作为参数传递。这将根据需要隐式分配数据
$GLOBALS["characters_array"]=[];
function character_array($key,$character_id, $characters_array) {
$name = character_name($character_id);
$color = character_color($character_id);
$array = array("character"=>$name, "color"=>$color);
$characters_array[$key]=$array;
}
character_array("foo", "bar", $GLOBALS["characters_array"]);
//This will still show nothing though
print_r($GLOBALS["characters_array"]);
请注意,上述print_r
仍未显示数据。这是因为当传递数组PHP时会按值执行,即在函数中复制它,然后在退出该函数范围时销毁它。
为了让函数获取数组并对其执行任何操作,您需要通过引用传递。这在函数签名中很简单,您需要在变量前面添加&
。
//Notice the & infront of $characters_array
function character_array($key,$character_id, &$characters_array) {
//code from above
}