arrays slim vullen
Mijn vraag: ik heb een bestandsbeheer module in PHP gemaakt, (file-based, niet MySQL based) rondom de fckeditor. Ik heb een php bestand, config_paginas.php waarin ik arrays inlees. Dat ziet er in het kort zo uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$eindpagina = 2; // is natuurlijk meer
$IdNummer[0] = '0L';
$IncludeNaam[0] = '00L_start.inc';
$Beschrijving[0]= 'Startpagina, linkerkolom onder het menu';
$WebPagina[0] = 't_index.php';
$PreviewPad[0] = 'preview_links.php';
$UitklapTekst[0]= 'Startpagina links, onder menu';
$IdNummer[1] = '0M';
$IncludeNaam[1] = '00M_start.inc';
$Beschrijving[1]= 'Startpagina, middenkolom, de hoofdkolom';
$WebPagina[1] = 't_index.php';
$PreviewPad[1] = 'preview_midden.php';
$UitklapTekst[1]= 'Startpagina middenkolom';
$t = 0;
while ($t <= $eindpagina)
{
echo "<option value=\"".$IdNummer[$t]."~".$IncludeNaam[$t]."~".$Beschrijving[$t]."~".$WebPagina[$t]."~".$PreviewPad[$t]."\">".$UitklapTekst[$t]."</option>\n";
$t++;
}
?>
$eindpagina = 2; // is natuurlijk meer
$IdNummer[0] = '0L';
$IncludeNaam[0] = '00L_start.inc';
$Beschrijving[0]= 'Startpagina, linkerkolom onder het menu';
$WebPagina[0] = 't_index.php';
$PreviewPad[0] = 'preview_links.php';
$UitklapTekst[0]= 'Startpagina links, onder menu';
$IdNummer[1] = '0M';
$IncludeNaam[1] = '00M_start.inc';
$Beschrijving[1]= 'Startpagina, middenkolom, de hoofdkolom';
$WebPagina[1] = 't_index.php';
$PreviewPad[1] = 'preview_midden.php';
$UitklapTekst[1]= 'Startpagina middenkolom';
$t = 0;
while ($t <= $eindpagina)
{
echo "<option value=\"".$IdNummer[$t]."~".$IncludeNaam[$t]."~".$Beschrijving[$t]."~".$WebPagina[$t]."~".$PreviewPad[$t]."\">".$UitklapTekst[$t]."</option>\n";
$t++;
}
?>
Dit werkt goed, maar ik wil af van het ingeven van de nummering. Nadeel is nu dat als ik iets tussen wil voegen, ik de nummers van de arrays daaronder (dus met hogere nummers) allemaal moet ophogen. Omslachtig.
Ik wil een array vullen dat genoeg heeft aan iets als dit, ik pik er eentje uit:
$IncludeNaam[] ="aap";
$IncludeNaam[] ="noot";
$IncludeNaam[] ="mies";
waarin het array zelf op volgorde van inlezen het nummer binnen de array toewijst, en misschien ook nog wel zelf het einde bepaalt.
Ik begrijp ook wel dat je een reeks (aap,noot,mies) wel in een array kan lezen, weet zo even de php-functie niet maar dat kan. Dan mis ik echter het overzicht wat ik nu heb. Dit opschrijvende, begint het me wel te dagen welke richting het uitmoet, maar ideeën toch welkom.
Ik hoop dat ik duidelijk ben. Bedankt voor je reactie.
Harry Koopman
Gewijzigd op 01/01/1970 01:00:00 door Harry nvt
Harry
Ik moet je direct maar even leren posten. ;-)
Pas je script even aan en gebruik en tags om je code heen. Om php code zet je uiteraard dit:Gebruik je knop om dit te doen.
Niet Bumpen::
SanThe.
Edit: Persoonlijk zou ik waarschijnlijk een array in een array maken.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
$array1 = array('IdNummer' => '0L',
'IncludeNaam' => '00M_start.inc',
'Beschrijving' => 'Startpagina, linkerkolom onder het menu',
'WebPagina' => 't_index.php',
'PreviewPad' => 'preview_links.php',
'UitklapTekst' => 'Startpagina links, onder menu');
$array2 = array('IdNummer' => '0M',
'IncludeNaam' => '00L_start.inc',
'Beschrijving' => 'Startpagina, middenkolom, de hoofdkolom',
'WebPagina' => 't_index.php',
'PreviewPad' => 'preview_midden.php',
'UitklapTekst' => 'Startpagina middenkolom');
$alles = array($array1, $array2);
foreach($alles AS $value)
{
echo '<option value="' . $value['IdNummer'] . '~' . $value['IncludeNaam'] . '~' . $value['Beschrijving'] . '~' . $value['WebPagina'] . '~' . $value['PreviewPad'] . '">' . $value['UitklapTekst'] . '</option>' . "\n";
}
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
$array1 = array('IdNummer' => '0L',
'IncludeNaam' => '00M_start.inc',
'Beschrijving' => 'Startpagina, linkerkolom onder het menu',
'WebPagina' => 't_index.php',
'PreviewPad' => 'preview_links.php',
'UitklapTekst' => 'Startpagina links, onder menu');
$array2 = array('IdNummer' => '0M',
'IncludeNaam' => '00L_start.inc',
'Beschrijving' => 'Startpagina, middenkolom, de hoofdkolom',
'WebPagina' => 't_index.php',
'PreviewPad' => 'preview_midden.php',
'UitklapTekst' => 'Startpagina middenkolom');
$alles = array($array1, $array2);
foreach($alles AS $value)
{
echo '<option value="' . $value['IdNummer'] . '~' . $value['IncludeNaam'] . '~' . $value['Beschrijving'] . '~' . $value['WebPagina'] . '~' . $value['PreviewPad'] . '">' . $value['UitklapTekst'] . '</option>' . "\n";
}
?>
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
SanThe gooit de 2 array's al samen, dus het wordt ook een multidimensionale array.
Robert_Deiman schreef op 12.09.2008 23:30:
@Karl
SanThe gooit de 2 array's al samen, dus het wordt ook een multidimensionale array.
SanThe gooit de 2 array's al samen, dus het wordt ook een multidimensionale array.
Zoals je kunt zien heeft hij dat er later bij geedit.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
$alles = array();
$alles[] = array('IdNummer' => '0L',
'IncludeNaam' => '00M_start.inc',
'Beschrijving' => 'Startpagina, linkerkolom onder het menu',
'WebPagina' => 't_index.php',
'PreviewPad' => 'preview_links.php',
'UitklapTekst' => 'Startpagina links, onder menu');
$alles[] = array('IdNummer' => '0M',
'IncludeNaam' => '00L_start.inc',
'Beschrijving' => 'Startpagina, middenkolom, de hoofdkolom',
'WebPagina' => 't_index.php',
'PreviewPad' => 'preview_midden.php',
'UitklapTekst' => 'Startpagina middenkolom');
foreach($alles AS $value)
{
echo '<option value="' . $value['IdNummer'] . '~' . $value['IncludeNaam'] . '~' . $value['Beschrijving'] . '~' . $value['WebPagina'] . '~' . $value['PreviewPad'] . '">' . $value['UitklapTekst'] . '</option>' . "\n";
}
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
$alles = array();
$alles[] = array('IdNummer' => '0L',
'IncludeNaam' => '00M_start.inc',
'Beschrijving' => 'Startpagina, linkerkolom onder het menu',
'WebPagina' => 't_index.php',
'PreviewPad' => 'preview_links.php',
'UitklapTekst' => 'Startpagina links, onder menu');
$alles[] = array('IdNummer' => '0M',
'IncludeNaam' => '00L_start.inc',
'Beschrijving' => 'Startpagina, middenkolom, de hoofdkolom',
'WebPagina' => 't_index.php',
'PreviewPad' => 'preview_midden.php',
'UitklapTekst' => 'Startpagina middenkolom');
foreach($alles AS $value)
{
echo '<option value="' . $value['IdNummer'] . '~' . $value['IncludeNaam'] . '~' . $value['Beschrijving'] . '~' . $value['WebPagina'] . '~' . $value['PreviewPad'] . '">' . $value['UitklapTekst'] . '</option>' . "\n";
}
?>
Jullie suggesties hebben me wel op het goede spoor gezet, via google kwam ik daardoor op een nog simpeler oplossing dicht bij mijn eerste opzet:
Als je een array zo maakt:
$ArrayNaam[] = "aap";
$ArrayNaam[] = "noot";
$ArrayNaam[] = "mies";
Dan maakt PHP de nummering intern zelf, geteld vanaf 0. (auto-incremented keys schijnt dat te heten).
In combinatie met de count() functie (geeft de lengte van een array) en een while lus is het vervolgens gemakkelijk om de door mij gewenste <option> </option> lijst te maken. Invoegen van een nieuw arrayblok is nu doodsimpel, en stelt me ook makkelijk in staat om pagina's uit te schakelen door af te checken wie de ingelogde user is. In kaboutercode:
if (ingelogde user) then arrayblok
zodat alleen die pagina's in de option lijst van de bestandskiezer komen voor de users voor wie de pagina's bestemd zijn.
Hieronder de code en prettig weekend.
Harry
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$IdNummer[] = '0L';
$IncludeNaam[] = '00L_start.inc';
$Beschrijving[] = 'Startpagina, linkerkolom onder het menu';
$WebPagina[] = 't_index.php';
$PreviewPad[] = 'preview_links.php';
$UitklapTekst[] = 'Startpagina links, onder menu';
$IdNummer[] = '0M';
$IncludeNaam[] = '00M_start.inc';
$Beschrijving[] = 'Startpagina, middenkolom, de hoofdkolom';
$WebPagina[] = 't_index.php';
$PreviewPad[] = 'preview_midden.php';
$UitklapTekst[] = 'Startpagina middenkolom';
// en zo voort
$t = 0;
while ($t < count($IdNummer)) { // count() is lengte array
echo "<option value=\"".$IdNummer[$t]."~".$IncludeNaam[$t]."~".$Beschrijving[$t]."~".$WebPagina[$t]."~".$PreviewPad[$t]."\">".$UitklapTekst[$t]."</option>\n";
$t++;
}
?>
$IdNummer[] = '0L';
$IncludeNaam[] = '00L_start.inc';
$Beschrijving[] = 'Startpagina, linkerkolom onder het menu';
$WebPagina[] = 't_index.php';
$PreviewPad[] = 'preview_links.php';
$UitklapTekst[] = 'Startpagina links, onder menu';
$IdNummer[] = '0M';
$IncludeNaam[] = '00M_start.inc';
$Beschrijving[] = 'Startpagina, middenkolom, de hoofdkolom';
$WebPagina[] = 't_index.php';
$PreviewPad[] = 'preview_midden.php';
$UitklapTekst[] = 'Startpagina middenkolom';
// en zo voort
$t = 0;
while ($t < count($IdNummer)) { // count() is lengte array
echo "<option value=\"".$IdNummer[$t]."~".$IncludeNaam[$t]."~".$Beschrijving[$t]."~".$WebPagina[$t]."~".$PreviewPad[$t]."\">".$UitklapTekst[$t]."</option>\n";
$t++;
}
?>
Dat werkt inderdaad, maar is erg omslachtig. Hipska's manier is veel logischer.
Harry Koopman schreef op 13.09.2008 02:15:
(Als het ook bumping is als je zelf met de oplossing komt binnen 24 uur moet men het maar zeggen..:)
@Harry
Bumpen is alleen als je zonder tussenkomst van iemand anders die post in jou topic nog een berichtje plaatst. Nu zitten er andere berichtjes tussen waar je natuurlijk als vanzelfsprekend wel op kan en mag reageren. (sterker nog, dit wordt ook eigenlijk wel verwacht :)
Dus wanneer jij 2x achter elkaar post (dat er 2 posts van jou direct na elkaar staan in hetzelfde topic) moet je de edit knop () gebruiken om een aanvulling te geven op hetgeen wat je gezegd hebt. Dit is om te voorkomen dat iedereen steeds een berichtje in het topic plaatst om in het lijstje met "laatste forum berichten" zichtbaar te blijven.
@Harry
De methode(n) die hiervoor waren genoemd waren handiger, ze zijn zeker duidelijker voor jou om mee te werken, maar ook wanneer iemand anders daarmee gaat werken is het handiger. Je ziet meteen wat wat is en hoe het werkt.
Bovendien heb je keurig alle gegevens verzameld bij elkaar en gegroepeerd staan, bij jou heb je veel te veel losse variabelen.
En als aanvulling: Mocht je bij jouw methode iets willen sorteren dan zal het niet eenvoudig zijn om de juiste gegevens bij elkaar te houden.
En inderdaad, sorteren is een optie, wat het wellicht mogelijk maakt om de gebruiker in de bestandskiezer een gesorteerde lijst van zijn pagina's voor te toveren via een cookie waarde die hij aan en uit kan zetten. Iets nog voor als het buiten hard regent...
Harry