簡體   English   中英

如何遞歸循環遍歷json以創建父/子對象PHP

[英]How to recursively loop through json to create parent/child objects PHP

我有一個json文件,有一個名為“dialogue_nodes”的數組。 數組中的每個對象都有一個“父”值和一個“dialog_node”值。 如果對話節點具有父值,則該值引用另一個對話節點的“dialogue_node”值。 在json文件中,所有父節點和子節點都位於頂部的dialog_nodes數組中的相同“級別”。 我目前正在手動循環遍歷數組。

如何動態循環遍歷數組以解釋父/子關系的不確定級別? 這是我目前的代碼。

$content = file_get_contents( "testWorkspace.json" );

$json = json_decode( $content );
$dialogueNodes = $json->dialog_nodes;

foreach ( $dialogueNodes as $node ) {

   if ( !isset( $node->parent ) ) {

       $topNodes[] = $node;

   } else {

    $otherNodes[] = $node;
   }
}

foreach ( $topNodes as $node ) {

   echo "top: {$node->title}";

   foreach ( $otherNodes as $node2 ) {

    if ( $node2->parent == $node->dialog_node ) {

        echo "level 2 child is {$node2->dialog_node} {$node2->title}";

        foreach ( $otherNodes as $node3 ) {

            if ( $node3->parent == $node2->dialog_node ) {

                echo "level 3 child is {$node3->dialog_node} {$node3->title}";

 continues.....

這是一個示例輸入。 第一個對象是父節點示例,第二個是子節點

{
  "title": "Welcome",
  "dialog_node": "node_5_1550586774524",
},
{
  "condition": true
  "output": "hello"
  "parent": "node_5_1550586774524"
  "dialog_node": "node_12_1554909604222"
},

你可能正在尋找一個遞歸函數,如:

foreach($topNodes as $node) {
  echo "top: {$node->title}";
  recursiveFunction($otherNodes, 1, $node->dialog_node);
}
function recursiveFunction($nodes, $level, $parent = null) {
  $level++;
  foreach($nodes as $node) {
    if ($node->parent === $parent ) {
      echo "level $level child is {$node->dialog_node} {$node->title}";
      recursiveFunction($nodes, $level, $node->dialog_node);
    }
  }
}

但要非常小心:遞歸函數可能很危險,最終會出現無限循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM