$another_array = array();
$array = array(5 => 1, 12 => 2);
make_another_array($array);
print_r($another_array);
function make_another_array(array $array) {
foreach ($array as $key=>$value) {
$another_array[$key] = $value;
}
}
我在函数内部向$another_array
添加值,但是当我在调用函数后打印$another_array
时,它会给出一个空白数组。
为什么会这样?如何正确地将值分配给$another_array
并在此处打印函数以使其不为空白?
答案 0 :(得分:2)
您没有捕获或返回数据:
function make_another_array(array $array) {
foreach ($array as $key=>$value) {
$another_array[$key] = $value;
}
return $another_array; // return here
}
$array = array(5 => 1, 12 => 2);
$another_array = make_another_array($array); // capture the returned value
print_r($another_array);
其次,您可能只想使用它:
$another_array = array_values($array);
如下面的评论,有参考方法:
function update_array(array &$array) {
$array[3] = 12;
}
update_array($array);
print_r($array);
最后,不是首选方法..
function update_array(array $a) {
global $another_array;
foreach($a as $key => $value){
$another_array[$key] => $value;
}
}
// or just array_merge
// $array = array_merge($array, $another_array);
答案 1 :(得分:1)
你必须在函数内返回another_array: 在函数内声明的变量只是局部变量,外部声明的变量是不可访问的。
$array = array(5 => 1, 12 => 2);
$another_array = make_another_array($array);
print_r($another_array);
function make_another_array(array $array) {
$another_array = array();
foreach ($array as $key=>$value) {
$another_array[$key] = $value;
}
return $another_array;
}
或者,你也可以通过引用传递另一个数组:
$another_array = array();
$array = array(5 => 1, 12 => 2);
make_another_array($array, $another_array);
print_r($another_array);
function make_another_array(array $array, &$another_array) {
foreach ($array as $key=>$value) {
$another_array[$key] = $value;
}
}
或者,您可以使用global关键字在函数内设置它们(但我建议使用其他两个解决方案):
$another_array = array();
$array = array(5 => 1, 12 => 2);
make_another_array($array);
print_r($another_array);
function make_another_array(array $array) {
global $another_array;
foreach ($array as $key=>$value) {
$another_array[$key] = $value;
}
}
最后你可以使用超全球$ GLOBALS,它可以在所有范围内访问。 (这与上面的溶剂非常相似)
$another_array = array();
$array = array(5 => 1, 12 => 2);
make_another_array($array);
print_r($another_array);
function make_another_array(array $array) {
foreach ($array as $key=>$value) {
$GLOBALS['another_array'][$key] = $value;
}
}
答案 2 :(得分:0)
您可以像以下一样传递by reference:
<?php
$another_array = array();
$array = array(5 => 1, 12 => 2);
function make_another_array($array, &$another_array) {
foreach ($array as $key=>$value) {
$another_array[$key] = $value;
}
return $another_array;
}
make_another_array($array, $another_array);
print_r($another_array);
答案 3 :(得分:-1)
确保引用$ another_array作为全局指向函数外部的引用,否则它只是本地的。
全球$ another_array; //把它放在make_another_array的开头(函数。
$another_array = array();
$array = array(5 => 1, 12 => 2);
make_another_array($array);
print_r($another_array);
function make_another_array(array $array)
{
global $another_array;
foreach ($array as $key=>$value){
$another_array[$key] = $value;
}
}