Avatar billede superkyll Nybegynder
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 ??
Avatar billede nielle Nybegynder
21. juli 2006 - 17:49 #1
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>';       
}
Avatar billede jakobdo Ekspert
21. juli 2006 - 19:01 #2
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>';     
}
Avatar billede superkyll Nybegynder
21. juli 2006 - 19:27 #3
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 ??
Avatar billede jakobdo Ekspert
21. juli 2006 - 19:30 #4
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.
Avatar billede nielle Nybegynder
21. juli 2006 - 19:48 #5
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.
Avatar billede jakobdo Ekspert
21. juli 2006 - 19:54 #6
Avatar billede nielle Nybegynder
21. juli 2006 - 20:03 #7
Prøv med:

echo echo 'Titel: ' . $data[0]["header_title"] . '</br>';

foreach ($data[0]["graph_category"] as $key => $value)
{
    echo $key . " =&gt; " . $value . "<br>";
}

echo "</br>";
Avatar billede superkyll Nybegynder
21. juli 2006 - 21:27 #8
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
Avatar billede superkyll Nybegynder
21. juli 2006 - 21:29 #9
aahhrrgg  - alle lodrette streger skal stå under hinanden :S
Avatar billede nielle Nybegynder
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 ;^)
Avatar billede superkyll Nybegynder
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 ) ) )
Avatar billede nielle Nybegynder
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 . " =&gt; " . $value . "<br>";
}

echo "</br>";

for ($i=0; $i<4; $i++)
{
    foreach ($data[0][$i] as $key => $value)
    {
        echo $key . " =&gt; " . $value . "<br>";
    }

    echo "</br>";
}
Avatar billede superkyll Nybegynder
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 . " =&gt; " . $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 . " =&gt; " . $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" ??
Avatar billede jakobdo Ekspert
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.
Avatar billede nielle Nybegynder
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?
Avatar billede superkyll Nybegynder
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...
Avatar billede nielle Nybegynder
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å.
Avatar billede superkyll Nybegynder
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 . " =&gt; " . $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 . " =&gt; " . $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
Avatar billede superkyll Nybegynder
21. juli 2006 - 23:18 #19
JA - det er nok bedst at få 100% styr på det array
Avatar billede jakobdo Ekspert
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".
Avatar billede superkyll Nybegynder
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
Avatar billede jakobdo Ekspert
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)
Avatar billede nielle Nybegynder
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 :^)
Avatar billede jakobdo Ekspert
21. juli 2006 - 23:53 #24
Takker for point.
Avatar billede superkyll Nybegynder
21. juli 2006 - 23:53 #25
tak for hjælpen :D
Avatar billede nielle Nybegynder
22. juli 2006 - 07:43 #26
Takke for point :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester