Array parsen
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
"flags" => array(
"Immunity" => "grav ping afk a b c d e f g h i k l m n o p q r s t u v x y",
"Immunity" => "autojoin",
"Admin" => "q2 q3 grav pban A B C D E F G H I J K L M N O P Q R S T U V",
"Admin" => "W X Y Z a b c d e f g i k l m o p q r s t v w x y z client",
"Admin" => "admin spray",
),
"Immunity" => "grav ping afk a b c d e f g h i k l m n o p q r s t u v x y",
"Immunity" => "autojoin",
"Admin" => "q2 q3 grav pban A B C D E F G H I J K L M N O P Q R S T U V",
"Admin" => "W X Y Z a b c d e f g i k l m o p q r s t v w x y z client",
"Admin" => "admin spray",
),
De array is niet correct geformat, omdat deze uit een ander programma komt, wat niet met PHP werkt. PHP moet de array gaan parsen, dus heb ik de handel kunnen omzetten naar bovenstaande. Het programma die dit genereert, kan blijkbaar wel overweg met dubbele keys, maar in PHP werkt dat natuurlijk niet.
De code kan weleens anders worden, maar PHP moet het kunnen blijven parsen, dus hoe kan ik het stuk code formatten dat het wel werkt? In andere woorden, hoe kan ik de code door PHP laten veranderen in dit:
Code (php)
1
2
3
4
2
3
4
"flags" => array(
"Immunity" => "grav ping afk a b c d e f g h i k l m n o p q r s t u v x y autojoin",
"Admin" => "q2 q3 grav pban A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g i k l m o p q r s t v w x y z client admin spray",
),
"Immunity" => "grav ping afk a b c d e f g h i k l m n o p q r s t u v x y autojoin",
"Admin" => "q2 q3 grav pban A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g i k l m o p q r s t v w x y z client admin spray",
),
Gewijzigd op 01/01/1970 01:00:00 door Marco
Hoe wordt het er nu ingeschreven?
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
"flags"
{
"Immunity" "grav ping afk a b c d e f g h i k l m n o p q r s t u v x y"
"Immunity" "autojoin"
"Admin" "q2 q3 grav pban A B C D E F G H I J K L M N O P Q R S T U V"
"Admin" "W X Y Z a b c d e f g i k l m o p q r s t v w x y z client"
"Admin" "admin spray"
}
{
"Immunity" "grav ping afk a b c d e f g h i k l m n o p q r s t u v x y"
"Immunity" "autojoin"
"Admin" "q2 q3 grav pban A B C D E F G H I J K L M N O P Q R S T U V"
"Admin" "W X Y Z a b c d e f g i k l m o p q r s t v w x y z client"
"Admin" "admin spray"
}
De array uit de eerste code geeft hierdoor alleen wat steeds in de laatste van de dubbele keys beschreven wordt, dus dat is dit:
Gewijzigd op 01/01/1970 01:00:00 door Marco
Met dat 'origineel' kan je niks. Je kan wel iets doen op het moment dat het originaal wordt aangemaakt.
Het origineel is verder ook niet echt belangrijk, omdat PHP er inderdaad niks mee kan. Daarom heb ik die ook (via PHP, want het moet automatisch) kunnen formatten naar het eerste stuk code wat ik in deze thread heb gepost.
Dus ik moet eigenlijk een script hebben die dit:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
"flags" => array(
"Immunity" => "grav ping afk a b c d e f g h i k l m n o p q r s t u v x y",
"Immunity" => "autojoin",
"Admin" => "q2 q3 grav pban A B C D E F G H I J K L M N O P Q R S T U V",
"Admin" => "W X Y Z a b c d e f g i k l m o p q r s t v w x y z client",
"Admin" => "admin spray",
),
"Immunity" => "grav ping afk a b c d e f g h i k l m n o p q r s t u v x y",
"Immunity" => "autojoin",
"Admin" => "q2 q3 grav pban A B C D E F G H I J K L M N O P Q R S T U V",
"Admin" => "W X Y Z a b c d e f g i k l m o p q r s t v w x y z client",
"Admin" => "admin spray",
),
veranderd in:
Code (php)
1
2
3
4
2
3
4
"flags" => array(
"Immunity" => "grav ping afk a b c d e f g h i k l m n o p q r s t u v x y autojoin",
"Admin" => "q2 q3 grav pban A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g i k l m o p q r s t v w x y z client admin spray",
),
"Immunity" => "grav ping afk a b c d e f g h i k l m n o p q r s t u v x y autojoin",
"Admin" => "q2 q3 grav pban A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g i k l m o p q r s t v w x y z client admin spray",
),
Gewijzigd op 01/01/1970 01:00:00 door Marco
Dat snap ik. Maar hoe maak je die eerste?
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
public function convertToArray($clientsfile) {
$subjects_a = array(" ", "\t", "{", "}", "%02%");
$replacements_a = array("%02%", " => ", "=> array(", "),", " ");
$subjects_b = array();
$replacements_b = array();
$newclientsfile = array();
foreach($clientsfile as $key => $value) {
while(strpos($value, "\t") === 0) {
$value = substr($value, 1);
}
$value = str_replace($subjects_a, $replacements_a, $value);
$value = str_replace($subjects_b, $replacements_b, $value);
if(strpos($value, "=>")) {
$value = $value.",";
}
$newclientsfile[] = $value;
}
return $newclientsfile;
}
?>
public function convertToArray($clientsfile) {
$subjects_a = array(" ", "\t", "{", "}", "%02%");
$replacements_a = array("%02%", " => ", "=> array(", "),", " ");
$subjects_b = array();
$replacements_b = array();
$newclientsfile = array();
foreach($clientsfile as $key => $value) {
while(strpos($value, "\t") === 0) {
$value = substr($value, 1);
}
$value = str_replace($subjects_a, $replacements_a, $value);
$value = str_replace($subjects_b, $replacements_b, $value);
if(strpos($value, "=>")) {
$value = $value.",";
}
$newclientsfile[] = $value;
}
return $newclientsfile;
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Marco
Okee, het wordt al iets duidelijker. Nu zou ik nog willen weten wat er in $clientsfile zit. Dus in de aanroep van de funtie.
In $clientsfile zit de originele versie van het bestand dat omgezet gaat worden, waar dus die code in staat waar je niks mee kan. Dat is in de array gezet met file():
$clientsfile = file("clients.txt");
Geef eens een paar regels uit die file. Even om te zien hoe dat in elkaar steekt.
Ik begrijp uit een ander topic van jou dat je dat bestand zelf creëert. Wat is het doel van dat bestand? Alleen opslaan van gegevens of moet dat persé in dat format?
Ik heb in een ander topic het erover gehad om dit bestand naar een format die php verstaat te converteren, maar ik maak de file niet zelf. Het bevat gegevens over rechten die users hebben op een server. Het moet ook perse in die format, omdat ik het bestand dus niet zelf maak en de parser niet php is. De rechten van users moeten ook via een website aangepast kunnen worden, dus wil ik het bestand leesbaar maken voor php, maar de format moet uiteindelijk hetzelfde zijn.
Ik heb hier al een testomgeving dus kom maar met je probleem.
- De naam van users moet aan te passen zijn;
- De steamid van users moet aan te passen zijn;
- De flags van users moeten aan te passen zijn;
- De groups waar users deel van uitmaken moeten aan te passen zijn;
- De groups zelf moeten aan te passen zijn.
Hoe ik het binnenkrijg maak niet zo heel veel uit, als een heel andere aanpak de oplossing biedt, mag dat ook, zolang het maar php is natuurlijk. Zelf vond ik de aanpak met arrays een vrij goeie, omdat de originele file er vrij veel op lijkt, en het een duidelijke structuur biedt.
Als je af en toe mijn testuitvoer wilt zien die staat hier onder 'test'.
Ok, dat stel ik zeer op prijs.
maak van die dubbele items gewoon een array.
dus ipv:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
"flags" => array(
"Immunity" => "grav ping afk a b c d e f g h i k l m n o p q r s t u v x y",
"Immunity" => "autojoin",
"Admin" => "q2 q3 grav pban A B C D E F G H I J K L M N O P Q R S T U V",
"Admin" => "W X Y Z a b c d e f g i k l m o p q r s t v w x y z client",
"Admin" => "admin spray",
),
"Immunity" => "grav ping afk a b c d e f g h i k l m n o p q r s t u v x y",
"Immunity" => "autojoin",
"Admin" => "q2 q3 grav pban A B C D E F G H I J K L M N O P Q R S T U V",
"Admin" => "W X Y Z a b c d e f g i k l m o p q r s t v w x y z client",
"Admin" => "admin spray",
),
iets als:
Ik heb best een tijd zitten puzzelen, maar ik ben bang dat ik het niet voor elkaar krijg.
Das jammer, zou je wel even willen posten wat je bereikt hebt? Ik heb de output in de gaten gehouden, maar daar staat geen php tussen.
Ik heb verschillende dingen geprobeerd, maar daar heb je echt niets aan. Misschien dat het simpeler zou zijn met een ander file-format. Maar ook dat weet ik niet zeker.