Meerdimensionaal associative array vullen en terug lezen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nkamp Kamp van de

nkamp Kamp van de

14/04/2017 12:20:21
Quote Anchor link
Hallo

Ik ben bezig met een applicatie waarvoor ik iets moet maken en dacht dat is iets voor een Meer dimensionaal Associative array. Alleen ik heb hier niet veel ervaring mee.

Voor het vullen heb ik een main query en een subquery. Dit gaat op zich goed al kan het misschien beter.
Vullen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$SQLMainQuery
= "SELECT...";
$RSM=($con, $SQLMainQuery)

while (odbc_fetch_array($ResultMainQuery) {

//vullen array MAIN deel
$aMwa = [odbc_result($RSM, field)][] = odbc_result($RSM, field) //Array main idex [0]
$aMwa = etc.
//
$SQLSubQuery = "SELECT... FROM VIEW WHERE Subquery_value = Mainquery_value";
$RSS=($con, $SQLSubQuery)

while (odbc_fetch_array($ResultQuery) {

//Aanvullen array met SUB query deel. Hier onstaat meerdimensionaal array
$aMwa = [odbc_result($RSM, field)][odbc_result($RSS, field)][] = odbc_result($RSS, field) //Sub Array idex [field name] => ARRAY ( [0]
$aMwa = [odbc_result($RSM, field)][odbc_result($RSS, field)][] = etc. vullen

}
}

?>


Het Resultaat wat ik nu krijg ben ik in eerste instantie niet ontevreden over.
Quote:
[MAIN_1] => Array
(
[0] => 11.12
[1] => 22.775000000
[2] => 33.895
[SUB_1_1] => Array
(
[0] => 22.12
[1] => 12.23000000
[2] => 23.895
)
)
[MAIN_2] => Array
(
[0] => 1.12
[1] => 33.775000000
[2] => 44.895
[SUB_2_1] => Array
(
[0] => 23.30
[1] => .000000000
[2] => 997.3
)
)

Waar ik wel over twijfel is dat in het MAIN_ deel een index [0], [1], [2] en dan opeens [SUB_] index heeft.Ik weet niet of ik dit anders moet doen.
In dit voorbeeld zit voor beide MAIN records maar één SUB_ record. Maar ieder Main record kan meerdere SUB records hebben

Het resultaat moet worden in HTML moet dan worden (ik weet niet hoe ik dit in HTML moet tonen, sorry):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<HTML>
<table>
<tr>
<th> kolom 1</th><th>Kolom 2</th><th>Kolom 4</th><th>Kolom 4</td>
</tr>
<tr>
<td>MAIN_1</td><td>11.12</td><td>22.775000000</td><td>33.895</td>
</tr>
<tr>
<td>- SUB_1_1</td><td>22.12</td><td>12.23000000</td><td>23.895</td>
</tr>
<tr>
<td>- evt. SUB_1_n</td><td>22.12</td><td>12.23000000</td><td>23.895</td>
</tr>
<tr>
<td>MAIN_2</td><td>1.12</td><td>33.775000000</td><td>44.895</td>
</tr>
<tr>
<td>- SUB_2_1</td><td>23.30</td><td>.000000000</td><td>997.3</td>
</tr>
</table>
</HTML>

Afgezien of ik mijn array wel op de juiste manier en of er geen betere manier is loop ik vast in het uitlezen van het subdeel. Daar ontbreekt ook een stukje kennis van opzetten (meer dimensionaal) associative array.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?PHP
$HTML
= '<table>';
foreach ($aMwa as $sMainLevel => $aSublevel) {
$HTML .= '<tr><td>'.$sMainLevel.'</td>';

for ($i=0; $i < 3; $i++) {
$HTML .= '<td>'.$aMwa[$sMainLevel][$i].'</td>';
}

$HTML .= '</tr>'; // Afsluiten MAIN regel

// En nu moet hier het SUB array uitgelezen worden. Hier zit dus de bottleneck

foreach ($aSublevel as $key => $value) {
$HTML .= '<tr><td> - '.$key.'</td>';
for ($j=0; $j < 3; $j++) {
$HTML .= '<td>'.$aSublevel[$key][$j].'</td>';
}

$HTML .= '</tr>'; // Afsluiten MAIN regel
}
}

$HTML = '/<table>';
?>

Ik weet niet of ik het goed uitgelegd heb maar ik hoop van wel.

Bedankt,

Nico
- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 14/04/2017 13:07:50 door - Ariën -
 
PHP hulp

PHP hulp

29/04/2024 15:00:34
 
Frank Nietbelangrijk

Frank Nietbelangrijk

14/04/2017 18:25:54
Quote Anchor link
Hmm volgens mij maak je het allemaal wel erg moeilijk.

een aantal dingen die ik me zo bedenk:
- main query / sub query is uiteindelijk 1 verzoek aan de database server.
- $RSM=($con, $SQLMainQuery) Dit is geen geldige PHP code
- Al maak je een super ingewikkelde query, het antwoord van de database is altijd (en anders bijna altijd) een twee dimensionale array. Namelijk Rij, Kolom.

Misschien een optie om gewoon even je indeling van je tabellen weer te geven waar dit topic over gaat en vervolgens vertellen welke informatie je uit die tabellen wilt halen? We kunnen je dan veel beter helpen. Het juist weergeven van de HTML is dan weer de stap die daarop volgt. De eerste kunst is namelijk om ENKEL die info uit je database te krijgen die je DAADWERKELIJK nodig hebt.
Gewijzigd op 14/04/2017 18:27:25 door Frank Nietbelangrijk
 
Nkamp Kamp van de

nkamp Kamp van de

24/04/2017 15:21:26
Quote Anchor link
Hallo,

Ik heb het opgelost.
De Query's.
Ik heb twee query's. Een 'buiten' query (om het dan maar even zo te noemen en een 'binnen' query. Hierbij is de binnen query afhankelijk van de buiten query, door in de where clause de waarde van de buiten query op te nemen.[/list]

Ik bedoel met een meer dimensionaal array, misschien niet helemaal correct verwoord, dat een of meerdere elementen weer een array zijn dus;
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
[MAIN_1] => Array
(
[0] => 11.12
[1] => 22.775000000
[2] => 33.895
[SUB_1_1] => Array
(
[0] => 22.12
[1] => 12.23000000
[2] => 23.895
)


Mijn fout was dat ik in principe een drie dimensionaal, althans dat denk ik dat dit zo is, aan het vullen was:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$Array['MAIN_1']['SUB_1_x'][] = waarde.
//Dit moest zijn:
 $Array['MAIN_1']['SUB_1_x'] = waarde

//Waarbij de x variabel is


Tenslotte het uitlezen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
 foreach($aArray as $key => $value) {
 if (!is_array($value) {
   //Doe wat je moet doen met de discrete waarden
 else
    foreach($value as $key2 => $value2) {
      // Doe hier wat je met 2e array moet doen
    }
  }
}

?>
Gewijzigd op 24/04/2017 15:23:09 door nkamp Kamp van de
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.