String aan string toevoegen als nieuwe stringnaam

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ron Kraaijkamp

Ron Kraaijkamp

10/10/2014 20:13:53
Quote Anchor link
Ik wil een XML file uitlezen waarin meerdere keren "hetzelfde" veld voor komt.
Het enige verschil tussen de secties in de XML file zijn de de nummers van de velden (01 t/m 20).

Hier is een stukje van de XML file:

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
<LijstAdmin>

    <plaats_01>01</plaats_01>
    <van_01></van_01>
    <band_01></band_01>
    <album_01>test1</album_01>
    <leverancier1_01></leverancier1_01>
    <leverancier1_link_01></leverancier1_link_01>
    <leverancier2_01></leverancier2_01>
    <leverancier2_link_01></leverancier2_link_01>
    <progstreaming_01></progstreaming_01>

    <plaats_02>02</plaats_02>
    <van_02></van_02>
    <band_02></band_02>
    <album_02></album_02>
    <leverancier1_02></leverancier1_02>
    <leverancier1_link_02></leverancier1_link_02>
    <leverancier2_02></leverancier2_02>
    <leverancier2_link_02></leverancier2_link_02>
    <progstreaming_02></progstreaming_02>

etc.

Ik wil met een for loop de pagina opbouwen en de secties laten zien.

Dit is de code om de XML uit te lezen, en dat werkt goed.
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
if (file_exists('../media/list.xml')) {
    $xml = simplexml_load_file('../media/list.xml');
 
//    print_r($xml);
} else {
    exit('Failed to open list.xml.');
}
//  Read Key ($key) and load value into $keyValue
foreach($xml as $key =>$keyValue)
  {
//  $key holds the name of the key we want to read in the string with that name
     $$key=$keyValue;
//  String $$key is now the actual variable (key) and hold the value in $keyValue
  }
//  All lines are red, defined as variable and that variable hold the actual value


Wanneer ik een echo doe van $plaats_01, dan krijg ik netjes de waarde van dat veld te zien.
Omdat de velden in de XML file zich herhalen, wil ik maar 1 maal de tabel opbouwen en deze in een for loop herhalen.
Hiervoor wil het liefst de variabele $plaats_01 samenstellen uit de vaste waard ($plaats_) en de waarde van $x.

Beschouw de regel <plaats_01>01</plaats_01> in de XML file en de sectie erop <plaats_02>02</plaats_02>
Ik wil de string $plaats_01 laten samenstellen uit $plaats_ en $x.

Waarschijnlijk is er een eenvoudige methode voor. Alleen kan ik er niet op komen.
Hieronder een stukje van de code om de tabel 20 maal op te bouwen.

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
for ($x=01; $x<=20; $x++)
{

$x=str_pad($x, 2, 0, STR_PAD_LEFT);

echo '
<!-- Define form with all entries and set accordingly the list.xml file -->
<form action="./submit.php" method="post" enctype="multipart/form-data">

<table border=1 width="100%">
  <tr>
    <td width="25px">
    <b>' . $plaats_ . $x . '</b>
    </td>

...
...
';
}


etc.

Wie geeft me een tip om verder te kunnen.
Ik kan de code natuurlijk 20 keer kopieeren. Daar is echter geen uitdaging aan.
 
PHP hulp

PHP hulp

28/04/2024 13:48:45
 
Willem vp

Willem vp

11/10/2014 02:13:36
Quote Anchor link
Tip: variable variables.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
for ($x=1; $x<=20; $x++)
{

   $varname = sprintf("plaats_%02d", $x);
   echo $$varname;
}

?>


Overigens zou ik het probleem (indien mogelijk) al bij de XML aanpakken, want de structuur daarvan is, laten we zeggen, suboptimaal...
Gewijzigd op 11/10/2014 02:22:15 door Willem vp
 
Ron Kraaijkamp

Ron Kraaijkamp

11/10/2014 11:26:24
Quote Anchor link
Willem vp op 11/10/2014 02:13:36:
Tip: variable variables.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
for ($x=1; $x<=20; $x++)
{

   $varname = sprintf("plaats_%02d", $x);
   echo $$varname;
}

?>


Overigens zou ik het probleem (indien mogelijk) al bij de XML aanpakken, want de structuur daarvan is, laten we zeggen, suboptimaal...




Toevoeging op 11/10/2014 11:28:31:

Willem,

bedankt en wat zeg je dat subtiel: Suboptimaal.

Ik zal eens nadenken wat je er mee bedoelt en hoe ik dat kan aanpakken. Bij de bron het probleem aanpakken is altijd beter.

Ook ga ik stoeien met het stukje script.
 
Willem vp

Willem vp

11/10/2014 11:52:25
Quote Anchor link
Ik hou van subtiel. ;-)

Wat ik bedoel qua structuur is iets in de richting van:

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
<LijstAdmin>
  <Item>
    <plaats>01</plaats>
    <van></van>
    <band></band>
    <album>test1</album>
    <leveranciers>
      <leverancier>
        <naam></naam>
        <link></link>
      </leverancier>
      <leverancier>
        <naam></naam>
        <link></link>
      </leverancier>
    </leveranciers>
    <progstreaming></progstreaming>
  </Item>
  <Item>
    [etc]
  </Item>
</LijstAdmin

en hier zijn ook weer verschillende varianten op mogelijk. Je XML-parser zal een iets uitgebreidere/ingewikkelder datastructuur geven, maar die schaalt dan wel beter als je ooit eens besluit om niet 20 maar 10 of 40 items in je XML op te nemen. Of 5 leveranciers.

Wat ik bedoel met "verschillende varianten": je zou bijvoorbeeld je leveranciers op deze manier kunnen opnemen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
    <leveranciers>
      <leverancier naam="" link="" />
      <leverancier naam="" link="" />
    </leveranciers>
 
Ron Kraaijkamp

Ron Kraaijkamp

11/10/2014 12:00:59
Quote Anchor link
Ik snap het.

Vooral de tweede variant spreek me aan. Omdat die ook leesbaar blijft voor een (andere) leek.

Ik heb ook naar de sprintf() functie gekeken. Ik had geen idee dat die hiervoor gebruikt kon worden omdat ik er nog nooit mee te maken had. Erg krachtig.
Voor beginners toch wel intimiderend.
 



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.