21. juli 2006 - 14:46
Der er
24 kommentarer og 2 løsninger
fange et bestemt array i et multi array
Jeg har et array med mange niveauer - og skal have kørt en foreach på et under array. arrayet ser nogenlunde sådan ud: $data = array(array( 'header_image' => './img/img1.png', 'header_title' => 'TITEL1', 'graph_category' => array( 'category' => 'kategori#1', 'cat_score' => 43, 'cat_interval' => array('bestemt','indlevende')), array( 'category' => 'kategori#2', 'cat_score' => 12, 'cat_interval' => array('saglig','omsorgsfuld')), array( 'category' => 'kategori#3', 'cat_score' => 87, 'cat_interval' => array('kortfattet','udtryksfuld')), array( 'category' => 'kategori#4', 'cat_score' => 16, 'cat_interval' => array('vedholdende','fleksibel')), array( 'category' => 'kategori#5', 'cat_score' => 71, 'cat_interval' => array('seriøs','munter'))), array('header_image' => './img/img2.png', 'header_title' => 'TITEL2', 'graph_category' => array( 'category' => 'kategori#1', 'cat_score' => 23, 'cat_interval' => array('praktisk','analytisk')), array( 'category' => 'kategori#2', 'cat_score' => 48, 'cat_interval' => array('teamorienteret','individualist')), array( 'category' => 'kategori#3', 'cat_score' => 11, 'cat_interval' => array('påvirkelig','hårdfør')), array( 'category' => 'kategori#4', 'cat_score' => 16, 'cat_interval' => array('rationel','spontan'))), array('header_image' => './img/img3.png', 'header_title' => 'TITEL3', 'graph_category' => array( 'category' => 'kategori#1', 'cat_score' => 43, 'cat_interval' => array('diplomatisk','styrende')), array( 'category' => 'kategori#2', 'cat_score' => 12, 'cat_interval' => array('selvmotiverende','social')), array( 'category' => 'kategori#3', 'cat_score' => 87, 'cat_interval' => array('kortsigtet','langsigtet')), array( 'category' => 'kategori#4', 'cat_score' => 16, 'cat_interval' => array('ansvarsorienteret','tillidsorienteret')), array( 'category' => 'kategori#5', 'cat_score' => 71, 'cat_interval' => array('omhyggelig','hurtig'))) );//end $data Har forsøgt mig med dette: $num = count($data); echo 'der er ' . $num . ' tabeller i dette array </br></br>'; foreach ($data as $table=>$cont) { echo 'Titel: ' . $cont[header_title] . '</br>'; foreach( $cont as $key=>$value ){ echo $value[category] . "<br>"; } echo '</br>'; } Dette resulterer i følgende: der er 3 tabeller i dette array Titel: TITEL1 . P SITUATIONSFORNEMMELSE EMPATI KOMUNIKATION OMSTILLINGSEVNE HUMOR Titel: TITEL2 . A PROBLEMFOKUS SELVSTÆNDIGHED STRESSHÅNDTERING INTUITION Titel: TITEL3 . S GENNEMSLAGSKRÆFT SYNLIGHED MÅLRETTETHED DELEGERING HANDLEFOKUS Problemet er at jeg får det første bogstav fra 'header_image' og 'header_title' det jeg vil have skrevet ud er indholdet fra 'graph_category' er der noget jeg gør helt forkert ??
Annonceindlæg fra Kingston Technology
Prøv med: foreach ($data[0] as $table=>$cont) { echo 'Titel: ' . $cont[header_title] . '</br>'; foreach ($cont as $key=>$value) { echo $value[category] . "<br>"; } echo '</br>'; }
Noget i stil med: foreach ($data as $table=>$cont) { echo 'Titel: ' . $cont['header_title'] . '</br>'; echo 'Image: ' . $cont['header_image'] . '</br>'; foreach($cont['graph_category']['cat_interval'] AS $key=>$value) { echo $value . " - " . $key . "<br>"; } echo '</br>'; }
nielle dit eks. giver en fejl. jakobdo med dit eks får jeg godt nok skrevet det ud der er i det første array i hver 'graph_category' hvis jeg nu vil have udskrevet alle de arrays der er under 'graph_category' hvordan gør jeg så det?? altså så jeg får noget der ligner: Titel: PERSONLIG STIL Image: ./img/backpack_s.png SITUATIONSFORNEMMELSE - category 43 - cat_score Array - cat_interval EMPATI - category 12 - cat_score Array - cat_interval KOMMUNIKATION - category 87 - cat_score Array - cat_interval OMSTILLINGSEVNE - category 16 - cat_score Array - cat_interval HUMOR - category 71 - cat_score Array - cat_interval Dit eksempel gav: Titel: PERSONLIG STIL Image: ./img/backpack_s.png SITUATIONSFORNEMMELSE - category 43 - cat_score Array - cat_interval håber sgu i forstår hvad jeg mener - det er lige før jeg ikke selv gør det :D - skal jeg måske omstrukturere mit array ??
Ellers prøv at skriv hvad du præcist ønsker som svar. Altså hvad du vil have skrevet ud. F.eks.: title: Noget. Image: bla Noget: bla1 Andet: bla2 osv... Måske vi så bedre forstår hvad du ønsker.
Prøv eventuelt lige at udskrive $data med en print_r(): print_r($data) - og post den her. Så er det en smule nemmere at overskue arrayets indre struktur.
Prøv med: echo echo 'Titel: ' . $data[0]["header_title"] . '</br>'; foreach ($data[0]["graph_category"] as $key => $value) { echo $key . " => " . $value . "<br>"; } echo "</br>";
det endelige resultat skulle gerne ende med en række tabeller uden at kende antallet af tabeller og rækker i tabellerne. lidt i stil med: ----------- PERSONLIG STIL: | | | billede | SITUATIONSFORNEMMELSE bestemt #####| indlevende | | EMPATI saglig |### omsorgsfuld | | KOMMUNIKATION kortfattet ####| udtryksfuld | | OMSTILLINGSEVNE vedholdende #| fleksibel ----------- HUMOR seriøs |#### munter billede og overskrift er sikre hver gang. antallet af kategorier der skal have en score kan variere. indtil nu har jeg styr på billede"header_image" og overskriften"header_title". jeg kan også få en enkelt af kategorierne ud men ikke alle i en iteration. håber det giver mening her i sommervarmen :D
aahhrrgg - alle lodrette streger skal stå under hinanden :S
21. juli 2006 - 21:41
#10
Kunne jeg ikke lige få en tilbagemelding på om 21/07-2006 20:03:38? Jeg regner bestemt ikke med at den fejler, men jeg har før taget fejl ;^)
21. juli 2006 - 21:52
#11
hej nielle - den virkede godt nok - men skriver kun den første array i "graph_category" jeg har dog lige fundet ud af at de efterfølgenede arrays har keys fra 0 - 4 så det er nok derfor de ikke kommer med i den foreach($data[0]["graph_category"]) hvordan får jeg lavet det om så alle arrays hører under "graph_category" ?? her er print_r: Array ( [header_image] => ./img/backpack_s.png [header_title] => PERSONLIG STIL [graph_category] => Array ( [category] => SITUATIONSFORNEMMELSE [cat_score] => 43 [cat_interval] => Array ( [0] => bestemt [1] => indlevende ) ) [0] => Array ( [category] => EMPATI [cat_score] => 12 [cat_interval] => Array ( [0] => saglig [1] => omsorgsfuld ) ) [1] => Array ( [category] => KOMUNIKATION [cat_score] => 87 [cat_interval] => Array ( [0] => kortfattet [1] => udtryksfuld ) ) [2] => Array ( [category] => OMSTILLINGSEVNE [cat_score] => 16 [cat_interval] => Array ( [0] => vedholdende [1] => fleksibel ) ) [3] => Array ( [category] => HUMOR [cat_score] => 71 [cat_interval] => Array ( [0] => seriøs [1] => munter ) ) )
21. juli 2006 - 22:04
#12
Nej de kommer ikke med fordi at de ikke er inden i $data[0]["graph_category"]) - dvs. at de ikke er "børn af". De kommer derimod "lige efter" - dvs. at de er "søskene til". Prøv med denne kode: echo echo 'Titel: ' . $data[0]["header_title"] . '</br>'; foreach ($data[0]["graph_category"] as $key => $value) { echo $key . " => " . $value . "<br>"; } echo "</br>"; for ($i=0; $i<4; $i++) { foreach ($data[0][$i] as $key => $value) { echo $key . " => " . $value . "<br>"; } echo "</br>"; }
21. juli 2006 - 22:49
#13
1echo 'Titel: ' . $data[0]["header_title"] . '</br>'; 2 3foreach ($data[0]["graph_category"] as $key => $value) 4{ 5 echo $key . " => " . $value . "<br>"; 6} 7 8echo "</br>"; 9 10for ($i=0; $i<4; $i++) 11{ 12 foreach ($data[0][$i] as $key => $value) 13 { 14 echo $key . " => " . $value . "<br>"; 15 } 16 17 echo "</br>"; 18} GIVER: Titel: PERSONLIG STIL Warning: Invalid argument supplied for foreach() in /home/testdata.php on line 3 Warning: Invalid argument supplied for foreach() in /home/testdata.php on line 12 Warning: Invalid argument supplied for foreach() in /home/testdata.php on line 12 Warning: Invalid argument supplied for foreach() in /home/testdata.php on line 12 Warning: Invalid argument supplied for foreach() in /home/testdata.php on line 12 Warning: Invalid argument supplied for foreach() in /home/testdata.php on line 12 ------------- ville det ikke være mest korrekt at få de ekstra "søskende" gjort til "børn" af "graph_category" ??
21. juli 2006 - 22:52
#14
Som svar på: ville det ikke være mest korrekt at få de ekstra "søskende" gjort til "børn" af "graph_category" ?? Forskellen er jo som sådan ens, men hvis du skal trække info ud dynamisk, ville det jo være lettest at trække et array ud, som så indeholder alle de graph ting du ønsker.
21. juli 2006 - 22:58
#15
Hmmm, jeg forstår ikke lige hvorfor den nu melder fejl i linje 3? Den ver jo med i koden fra 21/07-2006 20:03:38 og den gang virkede den ok. Har du lavet om på strukturen af $data siden da?
21. juli 2006 - 23:12
#16
de fejl var min skyld sorry resultatet bliver: Titel: PERSONLIG STIL category => SITUATIONSFORNEMMELSE cat_score => 43 cat_interval => Array category => EMPATI cat_score => 12 cat_interval => Array category => KOMUNIKATION cat_score => 87 cat_interval => Array category => OMSTILLINGSEVNE cat_score => 16 cat_interval => Array category => HUMOR cat_score => 71 cat_interval => Array og det er sådan set ok ud - men de næste to "tabel"'er skal også udskrives...
21. juli 2006 - 23:16
#17
Ok, men så tror jeg da nok at jeg også vil anbefale at du flytter dem et niveau ind så de bliver til "børn". Det er nok den struktur som passer mest naturligt med det du ønsker at opnå.
21. juli 2006 - 23:16
#18
har siddet og eksperimenteret med dit eksempel nielle og følgende virker næsten: 1for ($y = 1; $y <= count($data); $y++) { 2echo $y; 3 4echo 'Titel: ' . $data[$y-1]["header_title"] . '</br>'; 5 6foreach ($data[$y-1]["graph_category"] as $key => $value) 7{ 8 echo $key . " => " . $value . "<br>"; 9} 10 11echo "</br>"; 12 13for ($i=0; $i<4; $i++) 14{ 15 foreach ($data[$y-1][$i] as $key => $value) 16 { 17 echo $key . " => " . $value . "<br>"; 18 } 19 20 echo "</br>"; 21} 22echo '<hr></br>'; 23} det giver: 1Titel: PERSONLIG STIL category => SITUATIONSFORNEMMELSE cat_score => 43 cat_interval => Array category => EMPATI cat_score => 12 cat_interval => Array category => KOMUNIKATION cat_score => 87 cat_interval => Array category => OMSTILLINGSEVNE cat_score => 16 cat_interval => Array category => HUMOR cat_score => 71 cat_interval => Array 2Titel: ARBEJDSSTIL category => PROBLEMFOKUS cat_score => 23 cat_interval => Array category => SELVSTÆNDIGHED cat_score => 48 cat_interval => Array category => STRESSHÅNDTERING cat_score => 11 cat_interval => Array category => INTUITION cat_score => 16 cat_interval => Array Warning: Invalid argument supplied for foreach() in /home/testdata.php on line 15 3Titel: SAMARBEJDE OG LEDELSE category => GENNEMSLAGSKRÆFT cat_score => 16 cat_interval => Array category => SYNLIGHED cat_score => 48 cat_interval => Array category => MÅLRETTETHED cat_score => 77 cat_interval => Array category => DELEGERING cat_score => 68 cat_interval => Array category => HANDLEFOKUS cat_score => 9 cat_interval => Array
21. juli 2006 - 23:18
#19
JA - det er nok bedst at få 100% styr på det array
21. juli 2006 - 23:18
#20
Enig med Nielle, hvis der er flere kategorier, så er det smartest at lade dem være "børn" til en kategori "voksen".
21. juli 2006 - 23:20
#21
hvis i begge smider et svar kan jeg så smide 50 point til hver ??? for synes i begge har givet noget godt input at arbejde videre med.. og i hvert fald sat de små grå på arbejde :D
21. juli 2006 - 23:26
#22
Du får et svar, tror dog Nielle har fortjent størstedelen. Jeg var bare med på sidelinien! (vandbærer) :o)
21. juli 2006 - 23:31
#23
Jeg smider da gerne et svar, men skulle vi ikke gør denne her færdig først? Det bliver dog ikke i dag, for jeg er på vej i byen om lidt :^)
21. juli 2006 - 23:53
#24
Takker for point.
21. juli 2006 - 23:53
#25
tak for hjælpen :D
22. juli 2006 - 07:43
#26
Takke for point :^)
Vi tilbyder markedets bedste kurser inden for webudvikling