将值分配给函数内的数组

时间:2016-11-08 01:13:29

标签: php arrays

$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并在此处打印函数以使其不为空白?

4 个答案:

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

http://ideone.com/mAAeTp

答案 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; 

    }


}