$array变量不是';当定义为$GLOBALS[';players';][$name]=array(


$array variable isn't equal to $GLOBALS['players'][$name] when defined as $GLOBALS['players'][$name] = array()

使用下面的代码不起作用,但当我使用时

<?php
    $GLOBALS['players'] = array();
    function add($name) {
        $array = $GLOBALS['players'][$name] = array();
        array_push($array, "b");
    }
    add("a");
    print_r($players);
?>

(输出:Array([a]=>Array())此处的代码

<?php
    $GLOBALS['players'] = array();
    function add($name) {
        $array = $GLOBALS['players'][$name] = array();
        array_push($GLOBALS['players'][$name], "b");
    }
    add("a");
    print_r($players);
?>

(输出:Array([a]=>Array([0]=>b))工作正常。为什么$array在引用同一个数组时不起作用。

很简单,当您将值传递给$array时,您将$GLOBAL数组传递给一个新变量,而不是引用变量$GLOBAL变量。

简而言之:$array$GLOBAL是两个不同的变量。这样做就像做:

$a = 10;
$b = $a;
$b++;
print_r($a); // Will not print 11, but 10, because you edited the var $b, that is different from $a.

要解决这个小问题您必须通过如下引用将变量传递给$array

function add($name) {
    $GLOBALS['players'][$name] = array();
    $array = &$GLOBALS['players'][$name];
    array_push($array, "b");
}