String leesbaar weergeven.
Ik haal een veld op uit een database. dit veld bevalt een heel veel data. De data in dat veld ziet er zo uit
{{naam,waarde}{naam,waarde}{naam,waarde}}
Ik zet deze waarde in een string en probeer hem goed leesbaar weer te geven. En hier gaat het dus mis.
Heeft iemand een idee hoe ik deze data leesbaar kan maken met php.
Ik heb al lopen zoeken maar ben nog niet tot de oplossing gekomen misschien dat jullie een idee of tip hebben.
Alvast dank voor de medewerking
met explode()? heb je die {} als verduidelijking of staan ze er daadwerkelijk in?
Denk dat het handig zou zijn als ik ze in een array kan zetten.
Dat zou inderdaad handig zijn. Het wordt alleen erg omslachtig omdat je data zo vreemd is opgeslagen. Om wat voor reden heb je het op deze manier opgeslagen?
Nou ik heb deze data niet op deze manier opgeslagen. De data word op deze manier in een database gezet door een programma. (ik kan dit helaas niet aanpassen). En ik wil deze data gebruiken voor het maken van een rapportage.
http://php.net/manual/en/function.explode.php
Vervang alle dubbele {{ en }{ door hetzelfde (enkele) teken met str_replace, bijvoorbeeld puntkomma zodat je dit krijgt ;naam,waarde;naam,waarde;naam,waarde; substring de eerste ; eraf en vervolgens is explode() de aangewezen functie om het verder te verwerken. Gewijzigd op 27/05/2011 12:43:46 door John D
Code (php)
1
2
3
2
3
$data = $row['fields'];
$rest = substr($data, 2, -2);
$gegevens = explode("}{", $rest);
$rest = substr($data, 2, -2);
$gegevens = explode("}{", $rest);
Nu heb ik een array met de data erin. maar die waarde is nu naam,waarde. Dit zou ik ook nog willen splitten. zodat je krijgt
$gegevens[bedrijf] = dukes in plaats van gegevens[2] = bedrijf,dukes
alvast dank.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$string= '{{dier, koe}{beest, vogel}{voertuig, auto}}';
$string = substr($string, 2);
$string = substr($string, 0, -2);
$array = explode('}{', $string);
$result = array();
foreach ($array as $value_pair) {
$explode = explode(',', $value_pair);
$result[] = array($explode[0] => $explode[1]);
}
// en nu even testen
foreach ($result as $key => $array) {
foreach ($array as $naam => $waarde) {
echo '<br><strong>Naam:</strong> ' . $naam . ' <strong>waarde:</strong> ' . $waarde;
}
}
?>
$string= '{{dier, koe}{beest, vogel}{voertuig, auto}}';
$string = substr($string, 2);
$string = substr($string, 0, -2);
$array = explode('}{', $string);
$result = array();
foreach ($array as $value_pair) {
$explode = explode(',', $value_pair);
$result[] = array($explode[0] => $explode[1]);
}
// en nu even testen
foreach ($result as $key => $array) {
foreach ($array as $naam => $waarde) {
echo '<br><strong>Naam:</strong> ' . $naam . ' <strong>waarde:</strong> ' . $waarde;
}
}
?>
Toevoeging op 27/05/2011 12:54:20:
Resultaat:
Naam: dier waarde: koe
Naam: beest waarde: vogel
Naam: voertuig waarde: auto
Code (php)
in $data staat nu je array met gegevens.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$str = "{{naam1,waarde1}{naam2,waarde2}{naam3,waarde3}}";
$str = preg_replace('/{{/', '', $str);
$str = preg_replace('/}}/', '', $str);
$parts = explode("}{", $str);
foreach($parts as $key => $value)
{
$var[] = explode(",", $value);
}
foreach($var as $key => $value)
{
echo '<p>';
foreach($value as $key => $value)
{
echo $value.'<br />';
}
echo '</p>';
}
?>
$str = "{{naam1,waarde1}{naam2,waarde2}{naam3,waarde3}}";
$str = preg_replace('/{{/', '', $str);
$str = preg_replace('/}}/', '', $str);
$parts = explode("}{", $str);
foreach($parts as $key => $value)
{
$var[] = explode(",", $value);
}
foreach($var as $key => $value)
{
echo '<p>';
foreach($value as $key => $value)
{
echo $value.'<br />';
}
echo '</p>';
}
?>
naam1
waarde1
naam2
waarde2
naam3
waarde3
Te laat :P maar zal 'm alsnog posten. Niet heel netjes, maar zo kan 't ook.
$woord = explode(",",$gegevens[2]);
echo $woord[1]; (bedrijf)
echo $woord[2]; (dukes)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
# De string met gegevens.
$string = '{{naam1,waarde}{naam2,waarde}{naam3,waarde}}';
# Alle namen ophalen.
preg_match_all('/{(.*?),/', substr($string, 1, -1), $namen);
# Alle waardes ophalen.
preg_match_all('/,(.*?)}/', substr($string, 1, -1), $waarden);
# De gehele handel combineren tot 1 array met gegevens.
$data = array_combine($namen[1], $waarden[1]);
?>
# De string met gegevens.
$string = '{{naam1,waarde}{naam2,waarde}{naam3,waarde}}';
# Alle namen ophalen.
preg_match_all('/{(.*?),/', substr($string, 1, -1), $namen);
# Alle waardes ophalen.
preg_match_all('/,(.*?)}/', substr($string, 1, -1), $waarden);
# De gehele handel combineren tot 1 array met gegevens.
$data = array_combine($namen[1], $waarden[1]);
?>
Het kan waarschijnlijk nog korter. Regex is niet echt mijn ding.
Ik hoef ze niet allemaal weer te geven.
na dat stukje code
Code (php)
1
2
3
4
2
3
4
foreach ($array as $value_pair) {
$explode = explode(',', $value_pair);
$result[] = array($explode[0] => $explode[1]);
}
$explode = explode(',', $value_pair);
$result[] = array($explode[0] => $explode[1]);
}
Wil ik bijvoorbeeld de waarde laten zien van $result[29];
Hoe die ik dat?
Toevoeging op 27/05/2011 13:43:54:
Ik heb het al denk ik $result[29]['naam'];
Is dit de juiste manier of is er een simpelere manier?
Misschien een stomme opmerking maar is dit database ontwerp door je zelf gemaakt? Zo ja, dan is het misschien verstandiger om je database ontwerp te verbeteren. Dit is namelijk verre van genorminaliseerd. Dan is je data flexibeler en je hoeft geen omslachtige loops te maken om de data uit elkaar te plukken.
Erik van de Locht op 27/05/2011 13:49:48:
Misschien een stomme opmerking maar is dit database ontwerp door je zelf gemaakt? Zo ja, dan is het misschien verstandiger om je database ontwerp te verbeteren. Dit is namelijk verre van genorminaliseerd. Dan is je data flexibeler en je hoeft geen omslachtige loops te maken om de data uit elkaar te plukken.
Volgende keer eerst lezen voor je reageert?
Patrick de heer op 27/05/2011 12:20:25:
De data word op deze manier in een database gezet door een programma. (ik kan dit helaas niet aanpassen). En ik wil deze data gebruiken voor het maken van een rapportage.
Patrick de heer op 27/05/2011 13:35:12:
Hoe die ik dat?
Toevoeging op 27/05/2011 13:43:54:
Ik heb het al denk ik $result[29]['naam'];
Is dit de juiste manier of is er een simpelere manier?
Toevoeging op 27/05/2011 13:43:54:
Ik heb het al denk ik $result[29]['naam'];
Is dit de juiste manier of is er een simpelere manier?
verander deze regel:
$result[] = array($explode[0] => $explode[1]);
in dit:
$result[] = array('name' => $explode[0], 'value' => $explode[1]);
Je kunt nu de waarde opvragen door:
echo $result[3]['name'];
of
echo $result[29]['value'];
(Hou er wel rekening dat de 1e waarde van $result 0 is, dus $result[0]['name'] geeft de naam van het 1e resultaat).
Tur min op 27/05/2011 13:56:08:
Volgende keer eerst lezen voor je reageert?
Erik van de Locht op 27/05/2011 13:49:48:
Misschien een stomme opmerking maar is dit database ontwerp door je zelf gemaakt? Zo ja, dan is het misschien verstandiger om je database ontwerp te verbeteren. Dit is namelijk verre van genorminaliseerd. Dan is je data flexibeler en je hoeft geen omslachtige loops te maken om de data uit elkaar te plukken.
Volgende keer eerst lezen voor je reageert?
Patrick de heer op 27/05/2011 12:20:25:
De data word op deze manier in een database gezet door een programma. (ik kan dit helaas niet aanpassen). En ik wil deze data gebruiken voor het maken van een rapportage.
Nou, sorry hoor! Ik zat op mijn mobiele telefoon en dan heb ik niet altijd zin om het hele topic door te lezen.