下面是手册里的原文:复杂数组最好拷贝而不是引用。下面的例子不会如期望中那样工作。<?php
$top = array(
    'A' => array(),
    'B' => array(
        'B_b' => array(),
    ),
);$top['A']['parent'] = &$top;
$top['B']['parent'] = &$top;
$top['B']['B_b']['data'] = 'test';
print_r($top['A']['parent']['B']['B_b']); // array()
?> 
我输出的结果为:Array ( [data] => test ) ,这不就是预期的吗?
$top['A']['parent']为$top变量的引用,($top['A']['parent'] = &$top;)
它下边的['B']['B_b'],
不就是由$top['B']['B_b']['data'] = 'test';定义的[data] => test吗?
怎么会不如预期那样工作呢?预期怎么样工作呢?

解决方案 »

  1.   

    手册哪里? 
    没找到这段啊这里是用的另外一个例子
    http://www.php.net/manual/zh/language.references.arent.php
      

  2.   

    输出一下每步的结构就可以看得比较清楚:
    $top = array(
                'A' => array(),
                'B' => array(
                    'B_b' => array(),
                ),
            );        $top['A']['parent'] = &$top;
            echo '<pre>';
            print_r($top['A']['parent']);
            echo '</pre>';
            echo '<pre>';
            $top['B']['parent'] = &$top;
            echo '</pre>';
            echo '<pre>';
            print_r($top['B']['parent']);
            echo '</pre>';
            echo '<pre>';
            $top['B']['B_b']['data'] = 'test';
            print_r($top['B']['B_b']);
            echo '</pre>';
            echo '<pre>';
            print_r($top['A']['parent']['B']['B_b']); // array()
            echo '</pre>';
            echo '<pre>';
    运行结果如下:
    Array
    (
        [A] => Array
            (
                [parent] => Array
                    (
                        [A] => Array
     *RECURSION*
                        [B] => Array
                            (
                                [B_b] => Array
                                    (
                                    )                        )                )        )    [B] => Array
            (
                [B_b] => Array
                    (
                    )        ))
    Array
    (
        [A] => Array
            (
                [parent] => Array
                    (
                        [A] => Array
     *RECURSION*
                        [B] => Array
                            (
                                [B_b] => Array
                                    (
                                    )                            [parent] => Array
     *RECURSION*
                            )                )        )    [B] => Array
            (
                [B_b] => Array
                    (
                    )            [parent] => Array
                    (
                        [A] => Array
                            (
                                [parent] => Array
     *RECURSION*
                            )                    [B] => Array
     *RECURSION*
                    )        ))Array
    (
        [data] => test
    )Array
    (
        [data] => test
    )
    $top['A']['parent']['B']['B_b']的结果为:
    Array
    (
        [data] => test
    )