php - 이 무한 계층 함수를 명확하게 설명할 수 있는 사람이 있나요?
学习ing
学习ing 2017-06-29 10:08:08
0
6
746

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

으아아아
学习ing
学习ing

모든 응답(6)
習慣沉默

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

  • 인용 시:

으아악
  • 인용 없음:

으아악

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

巴扎黑

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

迷茫

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

하지만

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

世界只因有你

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

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

世界只因有你

참고 @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;
}
大家讲道理

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

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿