백엔드 개발 PHP 튜토리얼 关于xuzuning版主发的非递归树形数组构造函数有关问题

关于xuzuning版主发的非递归树形数组构造函数有关问题

Jun 13, 2016 pm 01:31 PM
child id pid quot

关于xuzuning版主发的非递归树形数组构造函数问题
之前自己使用过循环或者递归构建树型数组。今天搜索的时候看到之前xuzuning版主发的非递归树型数组构建函数。


PHP code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
/**
 * 创建子节点树形数组
 * 参数
 * $ar 数组,邻接列表方式组织的数据
 * $id 数组中作为主键的下标或关联键名
 * $pid 数组中作为父键的下标或关联键名
 * 返回 多维数组
 **/
function find_child($ar, $id='id', $pid='pid') {
  foreach($ar as $v) $t[$v[$id]] = $v;
  foreach ($t as $k => $item){
    if( $item[$pid] ) {
      $t[$item[$pid]]['child'][$item[$id]] =& $t[$k];
    }
  }
  return $t;
}

로그인 후 복사


觉得写的非常巧妙,效率很高,也非常安全,受益匪浅。但是,在实际使用中,碰见了一点小问题。
因为本函数的中心思想是通过$tree[$pid]这样的结构来存放,也就是说,每条记录的key为其$pid。

这样就出现了一个问题,我在使用json_encode()的时候,会变成
{"pid1":{"id":"0001","pid":"0000","children":[{"pid2":{"id":"0002","pid":"0001"}},{"pid3":{"id":"0003","pid":"0001"}}]}}这样
可是我需要的结构是
{"id":"0001","pid":"0000","children":[{"id":"0002","pid":"0001"},{"id":"0002","pid":"0001"}]}
也就是说,存放记录的key为array默认的。

请问这个函数应该怎么修改呢?

------解决方案--------------------
不大可能,除非你寻找出新的算法
这个算法就是利用了 pid 和 id 的关系,通过构造关联数组才得以实现的

如果要使用这个函数,就要接受这个结果。除去 child 键倒是可以的

如果你遍历结果,将所有 child 下的关联数组用 array_values 化为下标数组,亦是一种方法
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

이 Apple ID는 iTunes Store에서 아직 사용되지 않습니다. 수정 이 Apple ID는 iTunes Store에서 아직 사용되지 않습니다. 수정 Jun 10, 2024 pm 05:42 PM

AppleID를 사용하여 iTunesStore에 로그인하면 "이 AppleID는 iTunesStore에서 사용되지 않았습니다"라는 오류가 화면에 표시될 수 있습니다. 걱정할 오류 메시지는 없습니다. 다음 솔루션 세트에 따라 문제를 해결할 수 있습니다. 수정 1 – 배송 주소 변경 iTunes Store에 이 메시지가 나타나는 주된 이유는 AppleID 프로필에 올바른 주소가 없기 때문입니다. 1단계 – 먼저 iPhone에서 iPhone 설정을 엽니다. 2단계 – AppleID는 다른 모든 설정보다 우선해야 합니다. 그러니 열어보세요. 3단계 – 거기에서 “결제 및 배송” 옵션을 엽니다. 4단계 – Face ID를 사용하여 액세스 권한을 확인하세요. 단계

이벤트 뷰어에서 이벤트 ID 55, 50, 98, 140 디스크 오류 수정 이벤트 뷰어에서 이벤트 ID 55, 50, 98, 140 디스크 오류 수정 Mar 19, 2024 am 09:43 AM

Windows 11/10의 이벤트 뷰어에서 이벤트 ID 55, 50, 140, 98이 발견되거나, 디스크 파일 시스템 구조가 손상되어 사용할 수 없다는 오류가 발생하는 경우, 아래 안내에 따라 문제를 해결하시기 바랍니다. 이벤트 55, 디스크의 파일 시스템 구조가 손상되어 사용할 수 없음은 무엇을 의미합니까? 세션 55에서 Ntfs 디스크의 파일 시스템 구조가 손상되어 사용할 수 없습니다. 볼륨에서 chkMSK 유틸리티를 실행하십시오. NTFS가 트랜잭션 로그에 데이터를 쓸 수 없으면 이벤트 ID 55의 오류가 트리거되어 NTFS가 트랜잭션 데이터를 쓸 수 없는 작업을 완료하지 못하게 됩니다. 이 오류는 일반적으로 디스크에 불량 섹터가 있거나 파일 시스템의 디스크 하위 시스템이 부적절하여 파일 시스템이 손상된 경우에 발생합니다.

알리바바 ID는 어디서 찾을 수 있나요? 알리바바 ID는 어디서 찾을 수 있나요? Mar 08, 2024 pm 09:49 PM

Alibaba 소프트웨어에서는 계정 등록이 완료되면 시스템에서 플랫폼에서 귀하의 신원 역할을 하는 고유 ID를 할당합니다. 하지만 많은 사용자들은 자신의 ID를 조회하고 싶지만 어떻게 해야 할지 모릅니다. 그러면 이 웹사이트의 편집자가 아래 전략 단계에 대한 자세한 소개를 제공할 것입니다. 도움이 되기를 바랍니다! 알리바바 ID에 대한 답변을 찾을 수 있는 곳: [Alibaba]-[My]. 1. 먼저 홈페이지에 들어간 후 오른쪽 하단에 있는 [내]를 클릭해야 합니다. 2. 그런 다음 내 페이지로 이동하면 페이지 상단에 [id]가 표시됩니다. 아이디는 타오바오와 동일한가요? 알리바바 아이디와 타오바오 아이디는 다른데 둘이 맞나요?

이벤트 ID 4660: 개체가 삭제되었습니다. [수정] 이벤트 ID 4660: 개체가 삭제되었습니다. [수정] Jul 03, 2023 am 08:13 AM

독자 중 일부는 이벤트 ID4660을 경험했습니다. 그들은 무엇을 해야 할지 확신하지 못하는 경우가 많으므로 이 가이드에서 이에 대해 설명합니다. 이벤트 ID 4660은 일반적으로 개체가 삭제될 때 기록되므로 컴퓨터에서 이 문제를 해결할 수 있는 몇 가지 실용적인 방법도 살펴보겠습니다. 이벤트 ID4660이란 무엇입니까? 이벤트 ID 4660은 Active Directory의 개체와 관련되어 있으며 다음 요소에 의해 트리거됩니다. 개체 삭제 – Active Directory에서 개체가 삭제될 때마다 이벤트 ID 4660이 포함된 보안 이벤트가 기록됩니다. 수동 변경 - 사용자 또는 관리자가 개체의 사용 권한을 수동으로 변경할 때 이벤트 ID 4660이 생성될 수 있습니다. 이는 권한 설정을 변경하거나, 액세스 수준을 수정하거나, 사람이나 그룹을 추가 또는 제거할 때 발생할 수 있습니다.

Tencent Video ID 확인하는 곳 Tencent Video ID 확인하는 곳 Feb 24, 2024 pm 06:25 PM

Tencent Video ID는 어디서 확인할 수 있나요? Tencent Video 앱에는 전용 ID가 있지만 대부분의 사용자는 Tencent Video ID를 확인하는 방법을 모릅니다. 다음은 Tencent Video ID를 확인하는 방법에 대한 그래픽 튜토리얼입니다. 관심 있는 사용자를 위한 편집자입니다. Tencent Video 사용 튜토리얼 Tencent Video ID 확인 방법 1. 먼저 Tencent Video 앱을 열고 메인 페이지 오른쪽 하단의 [개인 센터]를 통해 특별 영역에 들어갑니다. 2. 그런 다음 개인 센터 페이지에 들어가서 [ 3. 설정 페이지로 이동하여 하단의 [계정 탈퇴]를 클릭하세요. 4. 마지막으로 아래와 같은 페이지에서 전용 ID 번호를 확인할 수 있습니다.

Win7 작업 관리자에서 pid를 표시하는 방법 편집기에서 표시 방법을 알려줄 것입니다. Win7 작업 관리자에서 pid를 표시하는 방법 편집기에서 표시 방법을 알려줄 것입니다. Jan 11, 2024 pm 07:00 PM

많은 친구들이 pid 식별자에 익숙하지 않을 수 있으며, 작업 관리자에서 확인할 수 있습니다. 그러나 일부 사용자는 작업 관리자를 열 때 PID 식별자를 찾을 수 없습니다. 실제로 사용자가 프로세스 PID 식별자를 보려면 이를 보려면 "작업 관리자"를 설정해야 합니다. win7 시스템을 예로 들어 프로세스 PID 식별자를 보는 방법. PID 식별자는 Windows 운영 체제가 실행 중인 프로그램에 자동으로 할당한 고유한 일련 번호입니다. PID는 프로세스가 종료된 후 시스템에 의해 재활용되며 사용자가 프로세스를 확인해야 할 때 계속해서 할당될 수 있습니다. , 그들은 작업 관리자를 사용하여 확인합니다. 프로세스 PID 식별자를 확인하는 방법은 무엇입니까? 아래에서 공유해드리겠습니다

Redis 분산ID 솔루션은 무엇인가요? Redis 분산ID 솔루션은 무엇인가요? Jun 03, 2023 am 10:14 AM

일반적으로 사용되는 분산 ID 솔루션 분산 시스템에서는 전역적으로 고유한 ID를 생성하는 것이 매우 중요합니다. 분산 시스템에서는 동시에 ID를 생성하는 여러 노드가 ID 충돌을 일으킬 수 있기 때문입니다. 다음은 일반적으로 사용되는 몇 가지 분산 ID 솔루션을 소개합니다. UUIDUUID(Universally Unique Identifier)는 128자리로 구성된 식별자로, 생성 알고리즘이 타임스탬프, 노드 ID 등의 요소를 기반으로 하기 때문에 전역적 고유성을 보장할 수 있습니다. UUID는 아래와 같이 Java 자체 UUID 클래스를 사용하여 생성할 수 있습니다. javaCopycodeimportjava.util.UUID;

Linux에서 상위 프로세스 ID(PPID)를 찾는 방법 Linux에서 상위 프로세스 ID(PPID)를 찾는 방법 Mar 09, 2024 am 08:01 AM

Linux 운영 체제에서 실행 중인 각 프로그램은 프로세스이며 각 프로세스에는 고유한 프로세스 식별자(PID)가 있습니다. 마찬가지로 각 프로세스에는 해당 프로세스를 생성한 부모 프로세스가 있습니다. 부모 프로세스의 식별자를 PPID(부모 프로세스 ID)라고 합니다. 이 기사에서는 Linux 시스템에서 상위 프로세스의 ID를 찾는 방법을 살펴보고 프로세스 간의 관계에 대한 자세한 정보를 얻는 데 도움이 되는 몇 가지 효과적인 명령과 도구를 소개합니다. 상위 프로세스 ID를 찾는 기본 명령 먼저 시스템에서 실행 중인 모든 프로세스와 해당 상위 프로세스 ID를 확인하는 데 사용할 수 있는 몇 가지 기본 명령을 간략하게 소개하겠습니다. ps 명령을 사용하여 프로세스 정보를 봅니다. ps 명령은 보고하는 데 사용되는 강력한 도구입니다.

See all articles