찾다

 >  Q&A  >  본문

php - 이 무한 계층 함수를 명확하게 설명할 수 있는 사람이 있나요?

사용할 수 있는데 볼 때마다 이해가 안 가는데 설명해주고 정리해줄 수 있는 사람? &여기서 참조 할당을 이해하는 방법은 무엇입니까?

으아아아
学习ing学习ing2765일 전757

모든 응답(6)나는 대답할 것이다

  • 習慣沉默

    習慣沉默2017-06-29 10:10:08

    테스트를 단순화할 수 있는 주로 참조를 사용합니다.

    • 인용 시:

    으아악
    • 인용 없음:

    으아악

    참조가 있는 경우 하위 요소의 변경 사항은 전체 배열에 표시되지만 참조가 없는 경우 하위 요소의 변경 사항은 전체 배열에 영향을 미치지 않습니다.

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-06-29 10:10:08

    아무도 없나요? 설명해주세요

    회신하다
    0
  • 迷茫

    迷茫2017-06-29 10:10:08

    그렇습니다, foreach 括号中的 items => a 和循环体中的 items => b 在内存中存在两个地方. 使用 & 之后, b 将会指向 a 即真正的 items.

    하지만

    에서 변경된 사항 => php7 foreach는 이전 버전과 호환되지 않습니다 php7 之后, foreach

    회신하다
    0
  • 世界只因有你

    世界只因有你2017-06-29 10:10:08

    참조 할당은 데이터 복사본을 받기 위해 새로운 공간을 여는 대신 할당의 왼쪽이 값이 저장되는 메모리 영역을 직접 가리킨다는 것을 의미합니다.

    따라서 부모-자식 수준 관계에서 참조 할당은 부모 요소의 ['son'],直接指向了子元素的那片存储区,而并非只是存了值而已。每一个父元素都将['son']指向对应子元素的存储区,这样,其实在内存里已经连接形成了一个树形的结构,而由于所有的父元素里['son']을 자식 요소의 메모리 영역 으로 직접 가리킵니다. 따라서 출력 배열의 부모-자식 관계는 기본적으로 데이터 관계와 동일합니다. 기억 속의 나무 .

    회신하다
    0
  • 世界只因有你

    世界只因有你2017-06-29 10:10:08

    참고 @vishun

    $items = array(
        1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),
        2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),
        3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),
        4 => array('id' => 4, 'pid' => 3, 'name' => '长丰县'),
        5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'),
    );

    //&引用赋值在这儿如何理解?
    $items[1]['son'][] = &$items[3];
    $items[3]['son'][] = &$items[2];
    print_r($items[1]);
    //简化了结果,可以直接看son
    //Array
    //(
    //    [id] => 1,[pid] => 0,[name] => 安徽省,
    //    [son] => Array(
    //        [0] => Array(
    //            [id] => 3,[pid] => 1,[name] => 合肥市,
    //            [son] => Array(
    //                [0] => Array(
    //                    [id] => 2,[pid] => 0,[name] => 浙江省
    //                )
    //            )
    //        )
    //    )
    //)

    //无限分级函数么?
    function getTree($items){
        $tree = array();
        foreach($items as $item){
            if(isset($items[$item['pid']])){//关键是看这个判断,是顶级分组就给$tree,不是的话继续拼凑子分组(结合上述&用法)
                $items[$item['pid']]['son'][] = &$items[$item['id']];
    
            }else{
                $tree[] = &$items[$item['id']];
            }
        }
        return $tree;
    }

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-06-29 10:10:08

    위 답변을 본 후에도 PHP에서 참조를 사용하는 것은 C/C++에서 포인터를 사용하는 것과 유사합니다. 이 경우 참조 변수를 사용하는 것과 같습니다. 함수에서 변수 자체도 변경됩니다.
    참조는 몇 가지 이점을 가져올 수 있습니다. "포인터"를 직접 작동하기 때문에 매우 효율적이며 불필요한 메모리 낭비를 일으키지 않고 메모리 개방 성능을 소모하지 않습니다.

    회신하다
    0
  • 취소회신하다