Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Niz u hijerarhijsku strukturu

[es] :: PHP :: Niz u hijerarhijsku strukturu

[ Pregleda: 2219 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6275

Sajt: pedja.supurovic.net


+1570 Profil

icon Niz u hijerarhijsku strukturu29.10.2014. u 21:23 - pre 114 meseci
Imam jedan problem koji nikako da ubodem kako da resim.

Imam niz objekata koji imaju propertije; id, naziv, kategorija, grupa, mesto
Treba da napravim funkciju koja za parametar dobija ovaj niz i listu polja po kojima treba da se grupisu slogovi tako da vrati hijerarhijsku strukturu grupisanih slogova prema zadatoj listi polja.

Ulazni niz nema unapred odredjenu strukturu (moze imati razlicita polja) a lista polja za grupisanje odgovara strukturi niza (ne moze se desiti da u listi bude ime polja koje ne postoji).


Primer:

ulazni niz

Code:


0001 Objekat01 A 01 001
0002 Objekat02 A 01 001 
0003 Objekat03 A 01 001 
0004 Objekat04 A 01 002 
0005 Objekat05 A 01 002 
0006 Objekat06 A 01 002 
0007 Objekat07 A 01 003 
0008 Objekat08 A 01 003 
0009 Objekat09 A 01 003 
0010 Objekat10 A 02 001 
0011 Objekat11 A 02 001 
0012 Objekat12 A 02 001 
0013 Objekat13 B 01 001 
0014 Objekat14 B 01 001 
0015 Objekat15 B 01 001 
0016 Objekat16 B 02 002 
0017 Objekat17 B 02 002 
0018 Objekat18 B 02 002 
0019 Objekat19 B 02 003 
0020 Objekat20 B 02 003 
0021 Objekat21 B 02 003 



Ako je lista polja za grupisanje "kategorija, grupa, mesto" treba da se dobije

Code:


A
 01 
   001 
     0001 Objekat1
     0002 Objekat2
     0003 Objekat3
   002 
     0004 Objekat4
     0005 Objekat5
     0006 Objekat6
   003 
     0007 Objekat7
     0008 Objekat8
     0009 Objekat9
 02
   001 
     0010 Objekat10
     0011 Objekat11
     0012 Objekat12
B
 01
   001 
     0013 Objekat13
     0014 Objekat14
     0015 Objekat15
 02
   002 
     0016 Objekat16
     0017 Objekat17
     0018 Objekat18
   003 
     0019 Objekat19
     0020 Objekat20
     0021 Objekat21



Ako je lista polja za grupisanje "kategorija, grupa" treba da se dobije


Code:


A
 01
   0001 Objekat01 A 01 001
   0002 Objekat02 A 01 001 
   0003 Objekat03 A 01 001 
   0004 Objekat04 A 01 002 
   0005 Objekat05 A 01 002 
   0006 Objekat06 A 01 002 
   0007 Objekat07 A 01 003 
   0008 Objekat08 A 01 003 
   0009 Objekat09 A 01 003 
 02
   0010 Objekat10 A 02 001 
   0011 Objekat11 A 02 001 
   0012 Objekat12 A 02 001 
B
 01
   0013 Objekat13 B 01 001 
   0014 Objekat14 B 01 001 
   0015 Objekat15 B 01 001 
 02
  0016 Objekat16 B 02 002 
  0017 Objekat17 B 02 002 
  0018 Objekat18 B 02 002 
  0019 Objekat19 B 02 003 
  0020 Objekat20 B 02 003 
  0021 Objekat21 B 02 003 





Evo PHP koji kreira ulazni niz:


Code:

<pre>
<?php

$kategorija = 'A';
$grupa = '01';
$mesto = '001';

$id = '0001';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;

$id = '0002';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;

$id = '0003';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;

$mesto = '002';

$id = '0004';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;

$id = '0005';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;

$id = '0006';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;


$mesto = '003';

$id = '0007';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;

$id = '0008';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;

$id = '0009';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;

$grupa = '02';
$mesto = '001';

$id = '0010';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;

$id = '0011';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;

$id = '0012';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;

$kategorija = 'B';
$grupa = '01';
$mesto = '001';

$id = '0013';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;

$id = '0014';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;

$id = '0015';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;

$mesto = '002';

$id = '0016';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;

$id = '0017';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;

$id = '0018';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;

$grupa = '02';
$mesto = '003';

$id = '0019';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;

$id = '0020';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;

$id = '0021';
$niz[$id]['id'] = $id;
$niz[$id]['naziv'] = 'Objekat' . $id;
$niz[$id]['kategorija'] = $kategorija;
$niz[$id]['grupa'] = $grupa;
$niz[$id]['mesto'] = $mesto;


print_r ($niz);

?>
</pre>


Da li je neko resavao slican problem?


[Ovu poruku je menjao Predrag Supurovic dana 29.10.2014. u 22:40 GMT+1]
 
Odgovor na temu

Jbyn4e

Član broj: 422
Poruke: 6049
*.static.sbb.rs.



+257 Profil

icon Re: Niz u hijerarhijsku strukturu31.10.2014. u 10:47 - pre 114 meseci
Moj kolega ti salje.. bilo mu zanimljivo...
Code (php):

 foreach ($niz as $key => $value) {
     $result[$value['kategorija']][$value['grupa']][$value['mesto']][] = array('id'=> $key, 'naziv' => $value['naziv']);
}
 

Pa ti vidi kombinuj...
Kad sve ostalo zakaže, pročitaj uputstvo...
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6275

Sajt: pedja.supurovic.net


+1570 Profil

icon Re: Niz u hijerarhijsku strukturu02.11.2014. u 00:34 - pre 114 meseci
Kolega je prevideo da su imen apolja samo primer, a da je to pormenljivo i da ne mogu znati unapred nazive polja niti njihov broj.

Resio sam ja to preko makroa ali ne volim takva resenja pa sam zato postavio problem ovde.


 
Odgovor na temu

Jbyn4e

Član broj: 422
Poruke: 6049
95.180.71.*



+257 Profil

icon Re: Niz u hijerarhijsku strukturu02.11.2014. u 09:12 - pre 114 meseci
Vidi, dao ti je kolega primer kako na napraviš prvi zahtev. Prvi i drugi zahtev ti se razlikuju i po broju članova niza, tj. nisu jednoznačni, prvo hoćeš da ima tačno 5 podataka:
Citat:
A
01
001
0001 Objekat1

a posle hoćeš 7:
Citat:
A
01
0001 Objekat01 A 01 001

od kojih se neki ponavljaju (A 01), a sve to želiš samo na osnovu kriterijuma sortiranja. Pri tom ne znaš ni nazive polja niti njihov broj - teško onda da će da postoji jednoznačna funkcija koja će bez dovoljno podataka znati šta treba da radi.

P.S. Pri tom niz koji si napravio se razlikuje od primera (u php kreiranju niza B ima 2 člana za 01, a ne 1, i jedan član za 02, a ne 2, dok je u primeru obrnuto)
Kad sve ostalo zakaže, pročitaj uputstvo...
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6275

Sajt: pedja.supurovic.net


+1570 Profil

icon Re: Niz u hijerarhijsku strukturu03.11.2014. u 10:37 - pre 114 meseci
Mozda sam negde omanuo kada sam pravio primere ali niej to toliko bitno, bitna je poenta u razlicitoj strukturi.

Izraz "$result[$value['kategorija']][$value['grupa']][$value['mesto']]" ne mogu da korsitim zato sto ne znam unapred imena polja.

Kao sto rekoh, resio sam to tako sto generisem izraz kao u tvom primeru ali kao string, pa ga na kraju izvrsim kao makro. To bih voleo da izbegnem.

Znaci ulazni podaci su mi niz sa podacima kome ne znam unapred strukturu osim da svaki element ima vise polja, i niz naziva polja po kojima treba da hijerarhijski prepakujem ulazne podatke.

 
Odgovor na temu

Jbyn4e

Član broj: 422
Poruke: 6049
95.180.71.*



+257 Profil

icon Re: Niz u hijerarhijsku strukturu03.11.2014. u 16:45 - pre 114 meseci
Ne znam šta ti je makro, ali nema veze, bitno da si se ti snašao...

Kad sve ostalo zakaže, pročitaj uputstvo...
 
Odgovor na temu

[es] :: PHP :: Niz u hijerarhijsku strukturu

[ Pregleda: 2219 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.