PHP - Array -> Multidim Array

Programovacie jazyky, rady, poradňa...
Aiden
Darca
Darca
Používateľov profilový obrázok
Príspevky: 2213
Registrovaný: 06 apr 2007, 14:28

PHP - Array -> Multidim Array

Príspevok od používateľa Aiden »

Ahojte, aktualne riesim takyto problem:

Mam pole prvkov v takomto formate a potrebujem ho upratat do modulov podla module_id, kde jednotlive cisla znamenaju prakticky uroven vnorenia.

Kód: Vybrať všetko

array (size=18)
  0 => 
    array (size=5)
      'field_id' => string '123' (length=3)
      'module_id' => string '1' (length=1)
      'value' => boolean false
...
  6 => 
    array (size=5)
      'field_id' => string '1124' (length=4)
      'module_id' => string '1x1' (length=3)
      'value' => boolean false
...
  8 => 
    array (size=5)
      'field_id' => string '11124' (length=5)
      'module_id' => string '1x1x1' (length=5)
      'value' => boolean false
  9 => 
    array (size=5)
      'field_id' => string '12125' (length=5)
      'module_id' => string '1x2x1' (length=5)
      'value' => string '' (length=0)
...
Snazim sa mat vystup v tvare:

Kód: Vybrať všetko

$out = [
    [
        'id' => '1',
        'fields' => [
            [
                'field_id' => '123',
                'value' => false
            ],
            [
                'field_id' => '124',
                'value' => false
            ],
        ],
        'submodules' => [
            [
                'id' => '1x1',
                'fields' => [
                    [
                        'field_id' => '1123',
                        'value' => false
                    ]
                ],
                'submodules' => [
                    'id' => '1x1x1',
                    'fields' => [
                        [
                            'field_id' => '11123',
                            'value' => false
                        ]
                    ],
                    'submodules' => []
                ]
            ],
            [
                'id' => '1x2',
                'fields' => [
                    [
                        'field_id' => '1223',
                        'value' => false
                    ]
                ],
                'submodules' => [],
            ]
        ]
    ],
    [
        'id' => '2',
        'fields' => [
            [
                'field_id' => '223',
                'value' => false
            ],
            [
                'field_id' => '224',
                'value' => false
            ],
        ],
        'submodules' => []
    ]
];
Prakticky kazdy modul obsahuje id, fields a submodules. Modul by sa nemal vytvorit, ak su fields prazdne, okrem pripadov, ze by mal nejake submodules, vtedy by fields ostali prazdny arr. Napada vam nejaky sposob, ako to dosiahnut relativne efektivne? Pokusal som to vytvarat z vonku dnu aj z vnutra von, ale oboje to bolo tazkopadne, neuniverzalne a tym viacmenej nefunkcne :?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: PHP - Array -> Multidim Array

Príspevok od používateľa audiotrack »

z vonku dnu rekurzívne. Ťažkopádne to je kvôli tým sprotým module_id. To ťa po akom tvrdom alkohole napadlo dať také identifikátory?
Aiden
Darca
Darca
Používateľov profilový obrázok
Príspevky: 2213
Registrovaný: 06 apr 2007, 14:28

Re: PHP - Array -> Multidim Array

Príspevok od používateľa Aiden »

Nebol to moj napad :-) Ako by si to upravil, aby to bolo jednoduhsie? Takuto zmenu by som vydupat mohol.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: PHP - Array -> Multidim Array

Príspevok od používateľa audiotrack »

dať tam iba id nadradeného, nie celej cesty až ku koreňu. Takto keď je tam id nejakého 1x2x1 modulu tak to čo je? Prvý modul, v ňom druhý submodul, a v ňom prvý submodul? A čo ak sa niektorý zmaže? Všetko ti to rozhodí, celú tú štruktúru. Čo ak tie moduly usporiadam inak (nie podľa id, ale podľa hodnoty)? Zrazu bude prvý niektorý iný, a zase ti to celú štruktúru rozhádže. Každý modul má svoje ID, takže module_id a field_id majú mať rovnaký formát, lebo obe ukazujú na to isté - nejaký identifikátor modulu.
Aiden
Darca
Darca
Používateľov profilový obrázok
Príspevky: 2213
Registrovaný: 06 apr 2007, 14:28

Re: PHP - Array -> Multidim Array

Príspevok od používateľa Aiden »

Dakujem audio, dava to zmysel. 1x2x1 znamena to, co si napisal. Prakticky sa vsak nemoze stat, ze by zmazanim nastala situacia 1x?x1, kedze po vytvoreni sa to cele berie ako nejaka staticka entita. Ak by sa nasledne zmazal ten 2. submodul, vznika by uplne nova revizia, kde by figuroval len 1. modul a vsetky dalsie submoduly by sa zahodili.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: PHP - Array -> Multidim Array

Príspevok od používateľa audiotrack »

a ten druhý problém čo som načrtol? Tzn. čo zaručuje poradie tých modulov? Ak má modul s id 1 dva sumboduly, a chcem druhému z nich pridať ďalší, tak to bude 1x1x1 alebo 1x2x1? Ako zistím či je to prvý alebo druhý submodul v tom module? Podľa id? Podľa hodnoty? Podľa čoho? Čo ak sa preusporiadajú? Alebo to ten model nedokáže meniť ich poradie, prípadne je to jedno?

ono spraviť sa dá všetko, len takéto riešenie vyvolá plno otáznikov. Otázniky = problémy do budúcnosti, pretože každý človek si to môže vysvetliť po svojom keď to nie je jednoznačné. A hlavne ti to nedá jednoznačné riešenie ani v prípade, že si tieto všetky otázky zodpovieš. Lebo si viazaný na postupnosť tých modulov. Poviem príklad. Majme dva algoritmy, ktoré budú spracovávať tvoj vstup a vytvárať tú štruktúru. Vytvoríme prvý modul, v ňom dva submodely, a do prvého z nich chcem ďalší submodel. Ak jeden algoritmus ide sekvenčne z hora dole, a druhý z dola hore (pritom z prog hladiska je to rozdiel v cykle veľmi maličký, iba pluska namiesto mínusiek) tak jeden ten tretí vnorený submodul priradí do prvého, druhý do druhého (lebo prvý ešte nevytvoril, tak tento druhý je pre neho jediný a teda prvý)
Aiden
Darca
Darca
Používateľov profilový obrázok
Príspevky: 2213
Registrovaný: 06 apr 2007, 14:28

Re: PHP - Array -> Multidim Array

Príspevok od používateľa Aiden »

Ah, vidim, ze som ta zrejme nepresne pochopil.

Modul 1 ma dva submoduly s id 1x1 a 1x2, takze ked chces pridat 'druhemu', id = 1x2, dalsi, dostavas 1x2x1. V principe som cez substr zahodil posledne 2 znaky v id a dostal som id parenta (alebo false ak nijakeho nema). Cize prvy, druhy, ... by tu vlastne nemali existovat. Urobim to tak, aby mal kadzy modul uid a odkaz na parenta. Tym lahko vytvorim potrebny strom a malo by to byt aj pochopitelne.
audiotrack napísal:Každý modul má svoje ID, takže module_id a field_id majú mať rovnaký formát, lebo obe ukazujú na to isté - nejaký identifikátor modulu.
Toto nie je celkom pravda. field_id patri fieldu a module_id je id modulu, pod ktory patri. T.j. viac fieldov moze byt v jednom moduli.
Napísať odpoveď