Archief - PHP: Multline textbox naar multi array

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

KlAzOiD

Legacy Member
Omdat ik voorlopig nog verdwaal met de array functie raak ik niet verder uit mijn probleem. De meeste sites die voorbeelden geven met uitleg over arrays vertrekken vanuit een array die in het begin van de code aangemaakt wordt. Dit is nu net wat ik hier nog moet doen en waar ik dus niet verder geraak.

Hoe zit het systeem in elkaar:

In een multiline textbox wordt een tekst geplaatst. Het is de bedoeling dat deze tekst omgevormd wordt naar een soort van string in csv syntax.
Hiervoor gebruik ik al:

PHP:
$csv = $_POST['stat'];
$csv = str_replace("\n",", ", $csv);

Daarna split ik deze data adhv:

PHP:
$fields = explode(",", $csv);

Hierdoor zou ik in $fields een array moeten hebben waarbij iedere nieuwe regel een rij is?

Wat moet er nu verder gebeuren?
Het is de bedoeling dat iedere rij nogmaals uitgesplitst wordt in verschillende values en dus een tweede dimensie vormen binnen de bestaande array. Hiervoor zou ik de volgende functie nodig hebben:

PHP:
$stats = str_replace("-", ", ", $stats);
$stats = str_replace(":", ", ", $stats);
list($value1, $value2, $vaue3, $value4) = explode(",", $stats);

Uiteindelijk zou ik dus willen dat mijn array er als volgt uitziet:
Code:
Fields[0] = $value1 = bla
              $value2 = ble
              $value3 = blo
              $value4 = blu
Fields[1] = $value1 = pla
              $value2 = ple
              $value3 = plo
              $value4 = plu
....

Indien je me hiebij kan helpen zou ik al heel tevreden zijn.
Daarbij komt dan nog een dat ik de array Fields dan nog eens zou moeten kunnen sorteren adhv bv. $value3

Ik weet dat er online heel wat info staat ivm arrays, ik heb weldegelijk gezocht maar niet direct een voorbeeld gevonden waar je juist de array aanmaakt. De meeste voorbeelden vertrokken vanuit een bestaande array en daar was het de bedoeling om die array weer te geven. Bij mij is dit dus niet het geval, bij mij zou het dan de bedoeling zijn om deze array in een databank te steken.

dank bij voorbaat, klazoid

KlAzOiD

Legacy Member
Ik heb ondertussen een oplossing gevonden die het mij mogelijk maakt om te doen wat ik wil doen:

PHP:
$csv = $_POST['stat'];
$csv = str_replace("\n",", ", $csv);
$lines = explode(",", $csv);
$i=0;	
	foreach($lines as $line){
		$line = str_replace(" \t", ", ", $line);
		$line = str_replace("/", ", ", $line);
		$line = str_replace(":", ", ", $line);
		$line = str_replace("  ", " ", $line);
		list($start1[$i], $name1[$i], $pointstot1[$i]) = explode(",",$line);
		$i++;
  	}	
asort($name1);
foreach($name1 as $key => $value){
if(trim($start1[$key])=="*"){
$starter = 1;
} else {
$starter = 0;
}
echo $value . " || Points: " . $pointstot1[$key] . " || Player start: " . $starter ."<br>";
}

Hoogstwaarschijnlijk is dit niet de meest katholieke oplossing dus mag je altijd verbeteringen aanbrengen.

Nu zit ik nog met een tweede vraagje:

De gegevens kopieer ik dus uit een bestaande html tabel. Deze website is niet van mij, de bedoeling is gewoon dat ik vlot de gegevens vanop deze website vlot kan verwerken in mijn databank (wedstrijdstatistieken).
De webmaster van de site waar de originele gegevens staan kan blijkbaar niet goed omgaan met het escapen van " en ' waardoor ik vermoed dat hij z'n gegevens "gekuist" invoerd. D'Hondt wordt weergegeven als DHondt.
Voor mij is dit een probleem omdat ik dus wel met de juiste weergave werk.

Wat ik doe is dus het sorteren van mijn array. Indien dit de correcte namen bevat zou dit als gevolg moeten hebben dat wanneer ik de namen uit mijn databank sorteer ze in dezelfde volgorde zouden moeten staan. Dit zou dus kunnen foutlopen:

D'Hondt en Delanghe // DHondt en Delanghe (hoofdletters voor kleine letters, geen probleem)
D'hondt en Delanghe // Delanghe en Dhondt (foute sortering)

Mijn vraag is dus of er een andere mogelijkheid bestaat. Ik heb vaag al eens een functie gezien die strings vergelijkt met elkaar en dan een cijfer weergeeft naarmate de overeenkomst tussen beiden. Ik ken de naam van de functie niet meer dus indien dit in jouw ogen een betere oplossing zou zijn, gelieve dit dan ook te bevestigen en dan ook de naam van die functie hier te plaatsen.

Een makkelijkere oplossing is natuurlijk mijn gegevens even omvormen en de speciale karakters eruit halen om dan een vergelijking te maken.

Indien je een andere idee hebt, altijd welkom.

KlAzOiD

Legacy Member
Tyfius zei:

deze functie zal niet gaan omdat de string dan volledig moet overeenkomen
D'Hondt != DHondt en zou als return via strcmp weergeven dat beiden niet hetzelfde zijn.

Ik denk dat ik mijn namen via
PHP:
str_replace("'","",$name)
ga opkuisen en dan zo ga sorteren. Zodoende moet ik niets vergelijken. Ik haal gewoon de spéciale tekens uit de namen om daarna de array waarin de namen zitten te sorteren.

Tyfius

Legacy Member
KlAzOiD zei:
Mijn vraag is dus of er een andere mogelijkheid bestaat. Ik heb vaag al eens een functie gezien die strings vergelijkt met elkaar en dan een cijfer weergeeft naarmate de overeenkomst tussen beiden. Ik ken de naam van de functie niet meer dus indien dit in jouw ogen een betere oplossing zou zijn, gelieve dit dan ook te bevestigen en dan ook de naam van die functie hier te plaatsen.

Tyfius zei:
Dat was als antwoord daar op. Naarmate de vergelijking geeft strcmp een waarde terug (> 0, = 0, < 0).

Of dit een ideale oplossing is, daar ben ik nog niet uit.

killgore

Legacy Member
dus je wilt eigenlijk gewoon elk woord in een 2D array steken (dus per woord per zin)?

PHP:
$woorden = explode("\n",$inputvar);
$l = sizeof($woorden);
for($i=0; $i<$l; $i++)
{
    $woorden[$i] = explode(" ",$woorden[$i]);
}

Als je dan echt variabelen er van wilt maken: extract eens bekijken.

dJeez

Legacy Member
KlAzOiD zei:
Ik heb vaag al eens een functie gezien die strings vergelijkt met elkaar en dan een cijfer weergeeft naarmate de overeenkomst tussen beiden.
Was het niet een code die de (fonetische) klank van de naam weergaf? Want dan zoek je naar het soundex of metaphone algoritme. Maar enkel op basis van die code sorteren lijkt mij niet echt aan te raden :p.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan