Verschillende waarden uit een bestand aangepast weergeven op een webpage
Door
jan de boer
op 08-12-2016 15:02
gewijzigd op 08-12-2016 15:25
1.984 views
Voor een website die ik aan het opzetten ben moet ik bepaalde waarden uit een bestand die ik op de server opsla op de juiste manier weergeven.
Ik ben hier al een tijdje mee bezig maar ik snap werkelijk niet hoe ik dit het beste kan doen.
Het bestand welke ik "lees" met PHP ziet er als volgt uit:
"Mypages"
{
"281074849"
{
"Name" "My test page 1"
"fileID" "1029858993740765071"
"updated" "1443227670"
}
"289239208"
{
"Name" "My test page 2"
"fileID" "8099995980341780415"
"updated" "1438189087"
}
"289252859"
{
"Name" "My test page 3"
"fileID" "2810998257328453720"
"updated" "1447741926"
}
"289290957"
{
"Name" "My test page 3"
"fileID" "8412147622805390167"
"updated" "1438189655"
}
}
De update time is in UNIX, ik ga deze als alles werkt converteren naar een leesbare datum. Bovenstaande is puur als voorbeeld.
Met gebruik van file_get_contents kan ik de file die al deze info bevat lezen, echter hoe ik nu die bepaalde waarden uit die string moet filteren zodat ze dan vervolgens bij het juiste item in de webpagina komen te staan begrijp ik niet.
Ik heb al wat geprobeerd met stristr, strrchr en strpos maar omdat zowel de characters { en " zo vaak voorkomen snap ik niet goed hoe ik mijn PHP code moet schrijven zodat ik al deze waardes kan lezen en vervolgens kan weergeven.
Ik kan niet veranderen hoe de indeling van de file is. Deze is zoals hierboven beschreven en daar moet ik het mee doen.
Ik hoop dat er hier iemand die mij hiermee kan helpen?
** changed url
Ik wil niet onbedoeld naar sites linken
De indeling van je bestand lijkt heel erg op JSON. Ik mis alleen de dubbele punten (:), de comma's (,) en de blokhaken ([ en ]). En dat is jammer want dat had het zoveel makkelijker gemaakt.
Kun je zelf nog wijzigingen aanbrengen aan de indeling? Weet je misschien welke extensie erbij hoort?
Het is een .acf bestand. Ik heb geen invloed over de info die in dit bestand staat en kan er dus ook niets aan veranderen.
Ik zat zelf ook te denken om het bestand te converteren naar iets anders met een andere indeling. Maar dan nog zit ik met het probleem over het identificeren van iedere value (tussen de aanhalings tekens).
Ik ben er ook nu mee bezig en probeer het nu door de " te tellen in het bestand. Die " vertaal ik dan naar een positie en lees ik de value vanaf die positie.
Maar....dat is puur een theorie. Ik heb serieus geen flauw idee of dit gaat werken maar nog belangerijker, hoe ik dat werkend krijg :)
Het lijkt er op dat de accolades een array aangeven.
{ = begin array.
} = einde array.
De Aanhalingstekens worden gebruikt om het begin en het einde van een tekenreeks aan te geven.
Je zou dan dit moeten krijgen wanneer je alles correct in de variabele $mypages hebt gestopt en de functie print_r gebruikt om de inhoud te laten zien.
Array
(
[281074849] => Array
(
[Name] => My test page 1
[fileID] => 1029858993740765071
[updated] => 1443227670
)
[289239208] => Array
(
[Name] => My test page 2
[fileID] => 8099995980341780415
[updated] => 1438189087
)
[289252859] => Array
(
[Name] => My test page 3
[fileID] => 2810998257328453720
[updated] => 1447741926
)
[289290957] => Array
(
[Name] => My test page 3
[fileID] => 8412147622805390167
[updated] => 1438189655
)
)
Indien de regels altijd zo mooi onder elkaar staan als je in het voorbeeld laat zien dan kun je beginnen om de regels in een array te zetten. Dit kun je direct doen tijdens het inlezen van het bestand met de functie file.
Vervolgens kun je een regel als "Name" "My test page 1" in delen hakken met de functie explode en trim.
<?php
$array = explode('" "', $regel);
?>
Hierna zit je dan nog met aanhalingstekens die je zult moeten verwijderen. Dit zou je met str_replace kunnen doen maar die houdt geen rekening met escaped double qoutes (\")..
Wat maakt die *.acf file aan? Kent dit geen oplossing om het in een fatsoenlijk formaat zoals JSON of XML te outputten? Ook handig om eens naar te kijken voordat je toch ergens een vorm van corruptie krijgt in je output.
Indien de regels altijd zo mooi onder elkaar staan als je in het voorbeeld laat zien dan kun je beginnen om de regels in een array te zetten. Dit kun je direct doen tijdens het inlezen van het bestand met de functie file.
Helaas, als ik de file zo inlees dan krijg ik één grote bende. Het wordt één grote array met oplopende nummers.
Ik heb het geprobeerd met het tellen van de " maar helaas geeft dat ook een probleem omdat er bij sommige entries zomaar een extra waarde bijkomt. Dus heb je niet het gelijke aantal " per item :(
Frank Nietbelangrijk op 08/12/2016 17:27:39
Het lijkt er op dat de accolades een array aangeven.
{ = begin array.
} = einde array.
De Aanhalingstekens worden gebruikt om het begin en het einde van een tekenreeks aan te geven.
Je zou dan dit moeten krijgen wanneer je alles correct in de variabele $mypages hebt gestopt en de functie print_r gebruikt om de inhoud te laten zien.
Array
(
[281074849] => Array
(
[Name] => My test page 1
[fileID] => 1029858993740765071
[updated] => 1443227670
)
[289239208] => Array
(
[Name] => My test page 2
[fileID] => 8099995980341780415
[updated] => 1438189087
)
[289252859] => Array
(
[Name] => My test page 3
[fileID] => 2810998257328453720
[updated] => 1447741926
)
[289290957] => Array
(
[Name] => My test page 3
[fileID] => 8412147622805390167
[updated] => 1438189655
)
)
Ik begrijp nog maar weing van hoe te werken met arrays. Als ik simpele voorbeelden bekijk denk ik...ah zo.
Maar als ik dat dan moet vertalen naar wat ik in dit topic probeer dan raak ik al helemaal in paniek.
Kun je mij vertellen hoe ik de info uit de file waarvan ik dus een string heb (gekregen met file_get_contents ) naar een array zou moeten vertalen?:
"Mypages"
{
"281074849"
{
"Name" "My test page 1"
"fileID" "1029858993740765071"
"updated" "1443227670"
}
"289239208"
{
"Name" "My test page 2"
"fileID" "8099995980341780415"
"updated" "1438189087"
}
"289252859"
{
"Name" "My test page 3"
"fileID" "2810998257328453720"
"updated" "1447741926"
}
"289290957"
{
"Name" "My test page 3"
"fileID" "8412147622805390167"
"updated" "1438189655"
}
}
@Arien
helaas is deze acf file het waarmee ik het moet doen. Geen andere opties, geen edit mogelijkheden.
Ik denk persoonlijk ook dat het geen beginners klusje is Jan. Als je array's nog niet goed door hebt dan kom je al gauw in de knoop met dit soort dingen.
Je hebt dan twee keuzes.
a) Gas terug. Eerst verder stoeien met array's
b) uitbesteden.
Ik wil graag zelf verder stoeien met arrays anders leer ik het nooit.
Ok, ik begrijp dat als ik deze arrays nu eindelijk eens door wil krijgen ik het maar gewoon moet gaan doen. Ik hoop dat jullie mij misschien een beetje bij kunnen staan hierbij.
Dus nieuwe aanpak.
Ik heb de hele string opgeschoond en deze ziet er nu zo uit:
"Mypages"
{
281074849 {
Name: My test page 1,
fileID: 1029858993740765071,
updated: 1443227670
}
289239208 {
Name: My test page 2,
fileID: 8099995980341780415,
updated: 1438189087
}
289252859
{
Name: My test page 3,
fileID: 2810998257328453720,
updated: 1447741926,
}
289290957
{
Name: My test page 3,
fileID: 8412147622805390167,
updated: 1438189655,
}
}
Na wat zoeken vond ik deze code om een array te maken: