ホームページ バックエンド開発 PHPチュートリアル 关于xuzuning版主发的非递归树形数组构造函数有关问题

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

Jun 13, 2016 am 10:22 AM
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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

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 はトランザクション データを書き込むことができず操作を完了できません。このエラーは通常、ディスク上に不良セクタが存在するか、ディスク サブシステムのファイル システムが不十分なために、ファイル システムが破損した場合に発生します。

Alibaba ID はどこで確認できますか? Alibaba ID はどこで確認できますか? Mar 08, 2024 pm 09:49 PM

Alibaba ソフトウェアでは、アカウントの登録が完了すると、システムによって一意の ID が割り当てられ、これがプラットフォーム上での ID として機能します。しかし、多くのユーザーは自分の ID を照会したいと考えていますが、その方法がわかりません。次に、この Web サイトの編集者が以下の戦略手順を詳しく紹介します。お役に立てれば幸いです。 Alibaba ID: [Alibaba]-[My] に対する答えはどこで見つかりますか。 1. まず Alibaba ソフトウェアを開きます. ホームページに入ったら、右下隅の [My] をクリックする必要があります; 2. その後、My ページにアクセスすると、ページの上部に [id] が表示されます; Alibaba ID はタオバオと同じですか? アリババ ID とタオバオ ID は異なりますが、この 2 つは同じです

TencentビデオIDを確認できる場所 TencentビデオIDを確認できる場所 Feb 24, 2024 pm 06:25 PM

Tencent Video ID はどこで確認できますか? Tencent Video APP には専用の ID がありますが、ほとんどのユーザーは Tencent Video ID を確認する方法を知りません。次は、Tencent Video ID を確認する方法についてのグラフィック チュートリアルです。興味のあるユーザーはぜひ見に来てください! Tencent Video 使用チュートリアル Tencent Video ID を確認する場所 1. まず Tencent Video APP を開き、メイン ページの右下隅にある [パーソナル センター] から特別エリアに入ります; 2. 次に、パーソナル センター ページに入り、[設定]機能; 3. 次に、設定ページに移動し、下部の[アカウントを終了]をクリックします; 4. 最後に、以下のページで専用のID番号が表示されます。

イベント ID 4660: オブジェクトが削除されました [修正] イベント ID 4660: オブジェクトが削除されました [修正] Jul 03, 2023 am 08:13 AM

一部の読者がイベント ID4660 に遭遇しました。何をすればよいかわからないことが多いため、このガイドで説明します。イベント ID 4660 は通常、オブジェクトが削除されたときにログに記録されるため、コンピューター上でイベント ID 4660 を修正する実際的な方法も検討します。イベントID4660とは何ですか?イベント ID 4660 は Active Directory 内のオブジェクトに関連しており、次のいずれかの要因によってトリガーされます。 オブジェクトの削除 – オブジェクトが Active Directory から削除されるたびに、イベント ID 4660 のセキュリティ イベントがログに記録されます。手動変更 – ユーザーまたは管理者がオブジェクトのアクセス許可を手動で変更すると、イベント ID 4660 が生成される場合があります。これは、権限設定の変更、アクセス レベルの変更、またはユーザーやグループの追加または削除を行うときに発生する可能性があります。

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;publicclassUuidGenerator{publicstat

Linux で親プロセス ID (PPID) を見つける方法 Linux で親プロセス ID (PPID) を見つける方法 Mar 09, 2024 am 08:01 AM

Linux オペレーティング システムでは、実行中の各プログラムがプロセスであり、各プロセスには一意のプロセス識別子 (PID) があります。同様に、各プロセスには、そのプロセスを作成したプロセスである親プロセスがあり、親プロセスの識別子は親プロセス ID (PPID) と呼ばれます。この記事では、Linux システムで親プロセスの ID を見つける方法を検討し、プロセス間の関係に関する詳細な情報を取得するのに役立ついくつかの効果的なコマンドとツールを紹介します。親プロセス ID を見つけるための基本コマンド まず、システム内で実行されているすべてのプロセスとその親プロセス ID を表示するために使用できるいくつかの基本コマンドを簡単に紹介します。 ps コマンドを使用してプロセス情報を表示します。ps コマンドは、レポートに使用される強力なツールです。

See all articles