微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php-老实说,我不知道如何制定这个通过引用的难题

所以这是我看到的这段代码在做的事情:

>制作一个数组
>循环重复10次

>创建一个新的数组
>对这个新数组的引用保存在第一个数组中

> 10个数组现在驻留在原始数组中,其值分别为0、1、2、3 …

实际发生的情况:

> WTF?

码:

<?PHP

header('Content-type: text/plain');

$arrays = array();

foreach(range(0, 10) as $i)
{
    $arr = array();
    $arr[0] = $i;

    $arrays[] = &$arr;
}

print_r($arrays);

输出

Array
(
    [0] => Array
        (
            [0] => 10
        )

    [1] => Array
        (
            [0] => 10
        )

    [2] => Array
        (
            [0] => 10
        )

    [3] => Array
        (
            [0] => 10
        )

    [4] => Array
        (
            [0] => 10
        )

    [5] => Array
        (
            [0] => 10
        )

    [6] => Array
        (
            [0] => 10
        )

    [7] => Array
        (
            [0] => 10
        )

    [8] => Array
        (
            [0] => 10
        )

    [9] => Array
        (
            [0] => 10
        )

    [10] => Array
        (
            [0] => 10
        )

)

我想确切地知道为什么显然只有第十个数组被引用了十次,而不是每个数组实例都被引用了一次.

另外,如果像我这样不只是在想WTF的人想编辑标题,请随时这样做.

解决方法:

线

$arr = array();

不会创建新数组,而是将一个空数组分配给已经存在的引用.
如果希望变量名“指向”内存中的另一个数组,则必须先对其进行unset()(或“ disconnect”),然后再为其分配一个空数组:

foreach(range(0, 10) as $i)
{
    unset($arr);
    $arr = array();
    $arr[0] = $i;

    $arrays[] = &$arr;
}

这是因为唯一可以使变量指向其他内容的操作是引用赋值(=&)和unset().

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐