[php] Konwertowanie tablic (array)

0

Witam. Mam maly problem potrzebuje w jakis sposob przrobic taka tablice:

Array
(
    [0] => Array
        (
            [id] => 1
            [parent] => 0
            [name] => Aparaty Cyfrowe
        )

    [1] => Array
        (
            [id] => 2
            [parent] => 1
            [name] => Sony
        )


    [2] => Array
        (
            [id] => 3
            [parent] => 1
            [name] => Canon
        )

    [3] => Array
        (
            [id] => 4
            [parent] => 3
            [name] => 3 Mpx
        )

    [4] => Array
        (
            [id] => 5
            [parent] => 3
            [name] => 4 Mpx
        )

    [5] => Array
        (
            [id] => 6
            [parent] => 0
            [name] => Kamery Cyfrowe
        )

    [6] => Array
        (
            [id] => 7
            [parent] => 6
            [name] => Philips
        )

)

co mniejwiecej wyglada tak:

Aparaty Cyfrowe
  Sony
  Canon
    4 Mpx
    3 Mpx
Kamery Cyfrowe
  Philips

na taka:

Array
(
    [Aparaty Cyfrowe] => Array
        (
            [Sony] => 1
            [Canon] => Array
                (
                    [3 Mpx] => 4
                    [4 Mpx] => 5
                )

        )

    [Kamery Cyfrowe] => Array
        (
            [Philips] => 7
        )

)

lub podobna :)

ma ktos jakis pomysl ? bo ja nie [sciana]

0
Function convert($tab)
{
    for($i = 0; $i < count($tab); $i++)
    {
        if($tab[$i]['parent'] == 0)
        {
             $rez[$tab[$i']['name']]['id']=$tab[$i']['id'];
        }
        else
        {
            for($a=0; $a < count($res); $a ++)
            {
                if($rez[$a]['id'] == $tab[$i]['parent'])
                {
                    $rez[$a][$tab[$i]['name']]['id'] = $tab[$i]['id'];
                }
            }
        }
    }
    return $rez;
}

ta funkcja da tablicę tegi typu:

$tab['Aparaty Cyfrowe']['Sony'] = ;
$tab['Aparaty Cyfrowe']['Canon'] = ;
$tab['Aparaty Cyfrowe']['Canon'] = ;
$tab['Kamery Cyfrowe']['Philips'] = ;

do kolejnych poziomów trzeba dorobić więcej pętelek w środku, albo w inny sposób konwertować tablicę...
Ja proponuje coś takiego... :]

0

do konwertowania do 2 poziomu juz napisalem sobie funkcje i to o wiele krotsza ale wlasnie potrzeba mi jakiejs ktora zrobi to z dowolna liczba poziomow :/

0

a rekurncyjnie sie nie da ??

0
cool_szczur napisał(a)

a rekurncyjnie sie nie da ??

da sie oto kodzik dla zainteresowanych:

<?php
  function rebuildArray( $id, $przeszukiwana )
  {
      $znalezione = array();

      foreach ( $przeszukiwana as $obiekt )
      {
          if( $obiekt['mnode_pid'] == $id )
          {
              $znalezione[$obiekt['mdata_name']] = $obiekt['mnode_id'];
              $childs = rebuildArray( $obiekt['mnode_id'], $przeszukiwana );
              if( $childs )
              {
                  $znalezione[$obiekt['mdata_name']] = $childs;
              }
          }
      }
      return $znalezione;
  }
?>

tylko w tym problem ze rzadko sie bawie z rekurencje [wstyd]
musze troszke sie podszkolic

1 użytkowników online, w tym zalogowanych: 0, gości: 1