Iç içe geçmiş bir dizi düz bir dizi dönüştürme

1 Cevap php

Her dizi öğesinin 'seviyeden' verilere bağlı olarak iç içe geçmiş bir dizi düz bir dizi dönüştürmek çalışıyorum. Geçerli dizi öğenin bir çocuk, ebeveyn ya da kardeş olup olmadığını 'level' veri bize gösteriyor.

İşte düz dizidir:

$flatArray = array(
    array('title'=>'Page 1', 'level'=>0),
    array('title'=>'Page 2', 'level'=>0),
    array('title'=>'Page 3', 'level'=>1),
    array('title'=>'Page 4', 'level'=>1),
    array('title'=>'Page 5', 'level'=>2),
    array('title'=>'Page 6', 'level'=>0),
    array('title'=>'Page 7', 'level'=>1),
    array('title'=>'Page 8', 'level'=>0)
);

Ve burada beklenen sonuç:

$nestedArray = array(
    array('title'=>'Page 1', 'children'=>array()),
    array('title'=>'Page 2', 'children'=>array(
        array('title'=>'Page 3', 'children'=>array()),
        array('title'=>'Page 4', 'children'=>array(
            array('title'=>'Page 5', 'children'=>array())
        )),
    )),
    array('title'=>'Page 6', 'children'=>array(
        array('title'=>'Page 7', 'children'=>array())
    )),
    array('title'=>'Page 8', 'children'=>array()),
);

Ben dizi indisleri ile başvurularını kullanarak denedim ama işe yaramadı.

1 Cevap

Bu yardımcı olur mu? Ben doğru olanı yapar düşünüyorum ... belki: D Üzgünüm o değilse.

$nestedArray = array();

foreach ($flatArray as $key => $value) {
  $current = &$nestedArray;
  $level = $value['level'];
  while ($level > 0) {
    $last = &$current[count($current) - 1];
    $current = &$last['children'];
    --$level;
  }
  $current[] = array('title' => $value['title'], 'children' => array());
}