给函数内部的数组赋值


Assign values to an array inside a function

$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和打印外面的功能在这里,使其不是空白?

您没有捕获或返回数据:

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);

你必须返回函数内部的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;
    }
}

您可以像下面这样通过引用传递它:

<?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);
http://ideone.com/mAAeTp

确保有一个引用$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; 
    }

}