anahtar değeri dayalı çok boyutlu birine düz php dizi dönüştürüyor?

1 Cevap php

Ben çok boyutlu yapmaya çalışıyorum düz bir dizi var. Temelde, ben anne var ve o ebeveyn kimliği için Subarray yaratmak öğeleri bulmak istiyorum. Şu anda (ve bu basitleştirilmiş), bu gibi görünüyor:

Array 
(
  [0] => stdClass Object
  (
    [id] => 1
    [parent] => 0
    [name ] => Parent1
  )

  [1] => stdClass Object
  (
    [id] => 7
    [parent] => 1
    [name] => Child1
  )

  [2] => stdClass Object
  (
    [id] => 9
    [parent] => 1
    [name] => Child2
  )

  [3] => stdClass Object
  (
    [id] => 2
    [parent] => 0
    [name ] => Parent2
  )

  [4] => stdClass Object
  (
    [id] => 88
    [parent] => 2
    [name] => Childof2
  )
)

Bunu yapmaya çalışıyorum:

Array 
(
  [0] => stdClass Object
  (
    [id] => 1
    [parent] => 0
    [name ] => Parent1
    [children] => stdClass Object
    (
       [1] => stdClass Object
       (
         [id] => 7
         [parent] => 1
         [name] => Child1
       )

       [2] => stdClass Object
       (
          [id] => 9
          [parent] => 1
          [name] => Child2
       )
    )
  )

  [1] => stdClass Object
  (
    [id] => 2
    [parent] => 0
    [name ] => Parent2
    [children] => stdClass Object
    (
       [0] => stdClass Object
       (
         [id] => 88
         [parent] => 2
         [name] => Childof2
        )
    )
  )
)

1 Cevap

Özyineleme kullanarak Kirli ve yavaş yolu sizin için burada. Pseudocode:

$objects;// Your plain list.
$root = (object) array('id' => 0);

appendChildren($root, $objects);

function appendChildren(&$node, $objects)
{
    foreach($objects as $obj)
    {
        if($obj->parent == $node->id)
        {
            if(!isset($node->children))
                $node->children = array();

            $node->children[] = $obj;
            appendChildren($obj, $objects);
        }
    }
}