0

私はこの種の配列を持っています:

array(2) {
[1] => array(3) {
  [3] => array(3) {
    ["data"] => array(3) {
      ["id"] => string(1) "3"
      ["depth"] => string(1) "1"
      ["parent_id"] => NULL
    }
  }
  [4] => array(3) {
    ["data"] => array(3) {
      ["id"] => string(1) "4"
      ["depth"] => string(1) "1"
      ["parent_id"] => NULL
    }
  }
  [2] => array(3) {
    ["data"] => array(3) {
      ["id"] => string(1) "2"
      ["depth"] => string(1) "1"
      ["parent_id"] => NULL
    }
  }
}
[2] => &array(3) {
  [15] => array(3) {
    ["data"] => array(3) {
      ["id"] => string(2) "15"
      ["depth"] => string(1) "2"
      ["parent_id"] => string(1) "3"
    }
  }
  [16] => array(3) {
    ["data"] => array(3) {
      ["id"] => string(2) "16"
      ["depth"] => string(1) "2"
      ["parent_id"] => string(1) "2"
    }
  }
  [18] => array(3) {
    ["data"] => array(3) {
      ["id"] => string(2) "18"
      ["depth"] => string(1) "2"
      ["parent_id"] => string(1) "4"
    }
  }
}
}

最初のレベルは深さを意味します(1には子がない、2には子のない親がある、など)。配列項目の順序は正しいです。同じ順序で(もちろんレベルに応じて)異なる配列を取得する必要があります。

array(6) {
[3] => array(3) {
  ["data"] => array(3) {
    ["id"] => string(1) "3"
    ["depth"] => string(1) "1"
    ["parent_id"] => NULL
  }
}
[15] => array(3) {
  ["data"] => array(3) {
    ["id"] => string(1) "15"
    ["depth"] => string(1) "1"
    ["parent_id"] => 3
  }
}
[4] => array(3) {
  ["data"] => array(3) {
    ["id"] => string(1) "4"
    ["depth"] => string(1) "1"
    ["parent_id"] => NULL
  }
}
[18] => &array(3) {
  ["data"] => array(3) {
    ["id"] => string(2) "18"
    ["depth"] => string(1) "2"
    ["parent_id"] => string(1) "4"
  }
}
[2] => array(3) {
  ["data"] => array(3) {
    ["id"] => string(2) "2"
    ["depth"] => string(1) "2"
    ["parent_id"] => NULL
  }
}
[16] => array(3) {
  ["data"] => array(3) {
    ["id"] => string(2) "16"
    ["depth"] => string(1) "2"
    ["parent_id"] => string(1) "2"
  }
}
}
4

1 に答える 1

0

**

最初の解決策

**

解決策を見つけましたが、そこから再帰を行う方法がわかりません。2 つのレベルでのみ機能します。3 番目のレベルは順序が悪いです。変数 $this->hierarchicalData には最初の配列が含まれています。

$_sortedHierarchyData = array();
foreach ($this->hierarchicalData as $levelKey => $_level) {
  foreach ($_level as $itemKey => $item) {
    if (isset($this->hierarchicalData[$levelKey + 1])) {
      $_sortedHierarchyData[$item['data']['id']] = $item;
      $children = $this->searchChildrenFromLevelOfHieararchicalSortedData($item['data']['id'], $this->hierarchicalData[$levelKey + 1]);
      $_sortedHierarchyData += $children;
    }               
  }
}

function searchChildrenFromLevelOfHieararchicalSortedData($parent_id, $level)
{
  $_children = array();
  foreach ($level as $key => $item) {
    if ($item['data']['parent_id'] === $parent_id) {
      $_children[$key] = $item;
    }
  }
  return $_children;
}
于 2013-03-07T13:34:30.063 に答える