自己試著寫了個無限級分類的,結果有些問題,想了很久了,感覺代碼沒問題呀,可就是結果不正確。現在整個人都懵了....
網上的栗子看了些,貌似寫法跟我的不一樣。
數組結構如下:
<code>Array ( [0] => Array ( [id] => 1 [name] => 代码 [parent] => 0 ) [1] => Array ( [id] => 3 [name] => 动漫 [parent] => 0 ) [2] => Array ( [id] => 4 [name] => 治愈 [parent] => 3 ) [3] => Array ( [id] => 5 [name] => 励志 [parent] => 3 ) [4] => Array ( [id] => 6 [name] => 机战 [parent] => 3 ) [5] => Array ( [id] => 7 [name] => 百合 [parent] => 3 ) [6] => Array ( [id] => 8 [name] => 资源 [parent] => 0 ) [7] => Array ( [id] => 9 [name] => app [parent] => 8 ) [8] => Array ( [id] => 10 [name] => 软件 [parent] => 8 ) [9] => Array ( [id] => 11 [name] => 黑科技 [parent] => 8 ) )</code>
其中 id
為分類唯一ID, parent
為父類ID
我寫的代碼 如下:
<code> function all($id=0){ static $_class = null; if(is_null($_class)) $_class = select(); //这个得出来的就是以上的数组结构,然后赋值给了`$_class`变量 $result = array(); foreach($_class as $k => $v){ if($v['parent'] == $id){ unset($_class[$k]); $v = array_merge($v, $this->all($v['id'])); $result['child'][] = $v; } } return $result; } print_r(all(0));</code>
回覆內容:
自己試著寫了個無限級分類的,結果有些問題,想了很久了,感覺代碼沒問題呀,可就是結果不正確。現在整個人都懵了....
網上的栗子看了些,貌似寫法跟我的不一樣。
數組結構如下:
<code>Array ( [0] => Array ( [id] => 1 [name] => 代码 [parent] => 0 ) [1] => Array ( [id] => 3 [name] => 动漫 [parent] => 0 ) [2] => Array ( [id] => 4 [name] => 治愈 [parent] => 3 ) [3] => Array ( [id] => 5 [name] => 励志 [parent] => 3 ) [4] => Array ( [id] => 6 [name] => 机战 [parent] => 3 ) [5] => Array ( [id] => 7 [name] => 百合 [parent] => 3 ) [6] => Array ( [id] => 8 [name] => 资源 [parent] => 0 ) [7] => Array ( [id] => 9 [name] => app [parent] => 8 ) [8] => Array ( [id] => 10 [name] => 软件 [parent] => 8 ) [9] => Array ( [id] => 11 [name] => 黑科技 [parent] => 8 ) )</code>
其中 id
為分類唯一ID, parent
為父類ID
我寫的代碼 如下:
<code> function all($id=0){ static $_class = null; if(is_null($_class)) $_class = select(); //这个得出来的就是以上的数组结构,然后赋值给了`$_class`变量 $result = array(); foreach($_class as $k => $v){ if($v['parent'] == $id){ unset($_class[$k]); $v = array_merge($v, $this->all($v['id'])); $result['child'][] = $v; } } return $result; } print_r(all(0));</code>
unset($_class[$k]);
這一行去掉
鑑於你這個還是用的遞歸來完成的,我這裡提供2個方法,一個是遞歸的,一個是指針形態的。
第二個可能您暫時無法理解,但是為幫助您學習,以及方便到他人,以下是代碼:
使用遞迴
<code>// 呃,我真不忍心写出这个循环那么多遍的代码,求神解救我。 function _data_to_tree(&$items, $topid = 0, $with_id = TRUE) { $result = []; foreach($items as $v) if ($topid == $v['parent']) { $r = $v + ['children' => _data_to_tree($items, $v['id'], $with_id)]; if ($with_id) $result[$v['id']] = $r; else $result[] = $r; } return $result; } </code>
使用PHP的指標特性
<code>function _data_to_tree($items, $topid = 0, $with_id = TRUE) { if ($with_id) foreach ($items as $item) $items[ $item['parent'] ]['children'][ $item['id'] ] = &$items[ $item['id'] ]; else foreach ($items as $item) $items[ $item['parent'] ]['children'][] = &$items[ $item['id'] ]; return isset($items[ $topid ]['children']) ? $items[ $topid ][ 'children' ] : []; }</code>
使用
傳入你的上述數組,例如最頂層的ID為0
<code>$data = [ ['id' => 4, 'parent' => 1 , 'text' => 'Parent1'], ['id' => 1, 'parent' => 0 , 'text' => 'Root'], ['id' => 2, 'parent' => 1 , 'text' => 'Parent2'], ['id' => 3, 'parent' => 2 , 'text' => 'Sub1'], ]; print_r ( _data_to_tree($data, 0) ); </code>
結果
<code>Array ( [1] => Array ( [id] => 1 [parent] => 0 [text] => Root [children] => Array ( [4] => Array ( [id] => 4 [parent] => 1 [text] => Parent1 [children] => Array ( ) ) [2] => Array ( [id] => 2 [parent] => 1 [text] => Parent2 [children] => Array ( [3] => Array ( [id] => 3 [parent] => 2 [text] => Sub1 [children] => Array ( ) ) ) ) ) ) )</code>

tomakephpapplicationsfaster,關注台詞:1)useopcodeCachingLikeLikeLikeLikeLikePachetoStorePreciledScompiledScriptbyTecode.2)MinimimiedAtabaseSqueriSegrieSqueriSegeriSybysequeryCachingandeffeftExting.3)Leveragephp7 leveragephp7 leveragephp7 leveragephpphp7功能forbettercodeefficy.4)

到ImprovephPapplicationspeed,關注台詞:1)啟用opcodeCachingwithapCutoredUcescriptexecutiontime.2)實現databasequerycachingingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandreduceconnection.4 limitesclection.4.4

依赖注入(DI)通过显式传递依赖关系,显著提升了PHP代码的可测试性。1)DI解耦类与具体实现,使测试和维护更灵活。2)三种类型中,构造函数注入明确表达依赖,保持状态一致。3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi

phpisusedforsenderemailsduetoitsbuilt-inmail()函數andsupportivelibrariesLikePhpMailerAndSwiftMailer.1)usethemail()functionForbasiceMails,butithasimails.2)butithasimail.2)

PHP性能瓶颈可以通过以下步骤解决:1)使用Xdebug或Blackfire进行性能分析,找出问题所在;2)优化数据库查询并使用缓存,如APCu;3)使用array_filter等高效函数优化数组操作;4)配置OPcache进行字节码缓存;5)优化前端,如减少HTTP请求和优化图片;6)持续监控和优化性能。通过这些方法,可以显著提升PHP应用的性能。

依賴性注射(DI)InphpisadesignPatternthatManages和ReducesClassDeptions,增強量強制性,可驗證性和MATIALWINABIOS.ItallowSpasspassingDepentenciesLikEdenciesLikedAbaseConnectionStoclasseconnectionStoclasseSasasasasareTers,interitationAseTestingEaseTestingEaseTestingEaseTestingEasingAndScalability。

cachingimprovesphpermenceByStorcyResultSofComputationsorqucrouctationsorquctationsorquickretrieval,reducingServerLoadAndenHancingResponsetimes.feftectivestrategiesinclude:1)opcodecaching,whereStoresCompiledSinmememorytssinmemorytoskipcompliation; 2)datacaching datacachingsingMemccachingmcachingmcachings


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

Dreamweaver CS6
視覺化網頁開發工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中