$sstr wordt niet ingevuld

Status
Niet open voor verdere reacties.

JeroenE

Terugkerende gebruiker
Lid geworden
20 mrt 2005
Berichten
1.950
Hallo,

Ik heb een functie geschreven die een waarde uit een array haalt als $scontent gelijk is aan de nederlandse waarde in die array.
Deze wordt echter niet toegewezen.
Wat is er mis?

PHP:
function fcontent($slang, $scontent) {
	$sstr = "";
	for ($na = 0; $na < count($atranslations); $na++) {
		if ($atranslations[$na]["dutch"].strtolower() == $scontent.strtolower()) {
			$sstr = $atranslations[$na]["$slang"];
		};
	};
	return $sstr;
};

Het werkt ook niet als ik het als volgt doe:

PHP:
function fcontent($slang, $scontent) {
	$sstr = "";
	for ($na = 0; $na < count($atranslations); $na++) {
		if ($atranslations[$na]["dutch"].strtolower() == $scontent.strtolower()) {
			$sstr = $atranslations[$na][$slang];
		};
	};
	return $sstr;
};

Alvast bedankt om met te helpen met het oplossen van dit probleem.

Jeroen
 
Laatst bewerkt:
Het probleem zit hem blijkbaar niet in de functie, maar wel in de array die blijkt leeg te zijn, maar als ik de array op een andere manier controlleer, dan werkt het wel en wordt de gewenste inhoud wel weergegeven.
De vraag is nu hoe ik dit het best kan oplossen.
 
Er zitten nog wel wat fouten in je functie, zo sluiten we functies en acolades in php niet af met een punt-comma ';'.
verder gebruik je binnen je functie een variabele $atranslations.. waar haal je die vandaan? geef deze array bijvoorbeeld ook mee aan de functie.

Probeer de volgende code eens, (ik verwacht echter niet dat het gaat werken nog, maar dan heeft de functie in ieder geval iets minder fouten.

PHP:
function fcontent($slang, $scontent) {
    $sstr = "";	
	foreach($atranslations as $translation)     // $atranslations nog ergens vullen als array! 
		if (strtolower($translation["dutch"]) == strtolower($scontent))     // Hier controleer je of de waarde van de array met element "dutch" hetzelfde is als de variabelen $scontent (okay)
			$sstr = $translation[$slang];   // en hier vraag je ineens een element "$slang" op uit de array??? (bestaat deze wel?)
    return $sstr;
}

geef wat meer informatie zodat we je probleem beter kunnen oplossen.

Mvg, Remco
 
Laatst bewerkt:
Dank je wel, Remco, om al de eerste paar fouten al op te lossen zoals het feit dat ik javascript en php door elkaar haalde door strtolower() verkeerd te gebruiken.
Hier is de array die gemaakt wordt bij het opvragen van de pagina:
PHP:
$atranslationssql = "SELECT * from translations";
$atranslationsquer = mysql_query($atranslationssql, $sdb) or die(mysql_error());

while ($atranslationsline = mysql_fetch_object($atranslationsquer)) {
	$ntranslations = count($atranslations);
	$atranslations[$ntranslations]["english"] = $atranslationsline->english;
	$atranslations[$ntranslations]["dutch"] = $atranslationsline->dutch;
	$atranslations[$ntranslations]["french"] = $atranslationsline->french;
	$atranslations[$ntranslations]["german"] = $atranslationsline->german;
	$atranslations[$ntranslations]["spanish"] = $atranslationsline->spanish;
	$atranslations[$ntranslations]["italian"] = $atranslationsline->italian;
	$atranslations[$ntranslations]["portugese"] = $atranslationsline->portugese;
};
De functie wordt als volgt aangeroepen:
PHP:
<?php
echo fcontent("english", "Schoolperiode");
?>
 
Ik snap nog niet helemaal wat je nu voor ogen hebt?
Hoe zit de tabel "translations" eruit? staan hier alle woorden in in meerdere talen?

In dat geval zou ik gewoon een functie maken waar je de taal aan meegeeft, en het 'id' of 'tag' die je aan het woord koppelt, en dan in de functie het desbetreffende woord ophalen.
Netter is om dit met een classe te doen waarbij je alle woorden in 1 keer laad, en met een functie van de classe de woorden ophaalt die je wilt gebruiken :)

Kun je ook eens een printje van de gemaakte array hier plaatsen?

dat kan als volgt;

PHP:
print_r($atranslations);

ps haal je de ';' nog even weg aan het eind van je while functie na de afsluitende accolade '}' (lijn 13 in het voorbeeld van je vorige bericht)
 
Als ik print_r($atranslations); in de code zet, dan krijg ik het volgende:

Code:
Array ( [0] => Array ( [english] => Belgian [dutch] => Belgische [french] => Belge [german] => Belgische [spanish] => Belga [italian] => Belga [portugese] => [russian] => [japanese] => [chinese] => [finnish] => [czech] => [danish] => [greek] => [hungarian] => [indonesian] => [icelandic] => [korean] => [norwegian] => [polish] => [romanian] => [serbian] => [slovenian] => [slovak] => [swedish] => [turkish] => [ukrainian] => [vietnamese] => [tai] => [estonian] => [filipino] => [hebrew] => [hindi] => [georgian] => [mongolian] => [persian] => ) [1] => Array ( [english] => French [dutch] => Franse [french] => Fran�ais [german] => Franz�sische [spanish] => Franc�s [italian] => Francese [portugese] => [russian] => [japanese] => [chinese] => [finnish] => [czech] => [danish] => [greek] => [hungarian] => [indonesian] => [icelandic] => [korean] => [norwegian] => [polish] => [romanian] => [serbian] => [slovenian] => [slovak] => [swedish] => [turkish] => [ukrainian] => [vietnamese] => [tai] => [estonian] => [filipino] => [hebrew] => [hindi] => [georgian] => [mongolian] => [persian] => ) [2] => Array ( [english] => German [dutch] => Duitse [french] => Allemand [german] => Deutsche [spanish] => Alem�n [italian] => [portugese] => [russian] => [japanese] => [chinese] => [finnish] => [czech] => [danish] => [greek] => [hungarian] => [indonesian] => [icelandic] => [korean] => [norwegian] => [polish] => [romanian] => [serbian] => [slovenian] => [slovak] => [swedish] => [turkish] => [ukrainian] => [vietnamese] => [tai] => [estonian] => [filipino] => [hebrew] => [hindi] => [georgian] => [mongolian] => [persian] => ) [3] => Array ( [english] => British [dutch] => Britse [french] => Britannique [german] => Britisch [spanish] => Brit�nico [italian] => Britannico [portugese] => [russian] => [japanese] => [chinese] => [finnish] => [czech] => [danish] => [greek] => [hungarian] => [indonesian] => [icelandic] => [korean] => [norwegian] => [polish] => [romanian] => [serbian] => [slovenian] => [slovak] => [swedish] => [turkish] => [ukrainian] => [vietnamese] => [tai] => [estonian] => [filipino] => [hebrew] => [hindi] => [georgian] => [mongolian] => [persian] => ) [4] => Array ( [english] => Spanish [dutch] => Spaanse [french] => Espagnol [german] => Spanisch [spanish] => Espa�olas [italian] => Spagnolo [portugese] => [russian] => [japanese] => [chinese] => [finnish] => [czech] => [danish] => [greek] => [hungarian] => [indonesian] => [icelandic] => [korean] => [norwegian] => [polish] => [romanian] => [serbian] => [slovenian] => [slovak] => [swedish] => [turkish] => [ukrainian] => [vietnamese] => [tai] => [estonian] => [filipino] => [hebrew] => [hindi] => [georgian] => [mongolian] => [persian] => ) [5] => Array ( [english] => Italian [dutch] => Italiaanse [french] => Italien [german] => Italienisch [spanish] => Italiano [italian] => Italiano [portugese] => [russian] => [japanese] => [chinese] => [finnish] => [czech] => [danish] => [greek] => [hungarian] => [indonesian] => [icelandic] => [korean] => [norwegian] => [polish] => [romanian] => [serbian] => [slovenian] => [slovak] => [swedish] => [turkish] => [ukrainian] => [vietnamese] => [tai] => [estonian] => [filipino] => [hebrew] => [hindi] => [georgian] => [mongolian] => [persian] => ) [6] => Array ( [english] => Portuguese [dutch] => Portugese [french] => Portugais [german] => Portugiesisch [spanish] => Portugu�s [italian] => Portoghese [portugese] => [russian] => [japanese] => [chinese] => [finnish] => [czech] => [danish] => [greek] => [hungarian] => [indonesian] => [icelandic] => [korean] => [norwegian] => [polish] => [romanian] => [serbian] => [slovenian] => [slovak] => [swedish] => [turkish] => [ukrainian] => [vietnamese] => [tai] => [estonian] => [filipino] => [hebrew] => [hindi] => [georgian] => [mongolian] => [persian] => ) )

De array is dus wel degelijk gevuld en als ik binnen een javascript in de php-file het volgende doe, dan krijg ik een alert met het juiste woord en het juiste aantal:

[JS]
<script language="javascript" type="text/javascript">
alert('<?php echo $atranslations[2]["dutch"] . " - " . count($atranslations); ?>');
</script>[/JS]

Alleen als hij vanuit de functie count($atranslations); doet, krijg ik een 0 en wordt er dus niet door de for-loop gegaan.

ps: alle ";"'s zijn verwijderd waar deze niet moeten staan, zowel in php als in javascript. Thx om me hierop te wijzen dat loops en functies niet met een ";" afgesloten worden. Weer iets bijgeleerd
 
Laatst bewerkt:
Buiten de functie kan ik de gewenste inhoud opvragen waar ik maar wil, maar de lengte van de array wilt hij onder geen enkele mogelijkheid meenemen binnen de functie.
Volgende zaken heb ik geprobeerd:

PHP:
function fcontent($ntranslations, $slang....

echo fcontent(count($atranslations), "english", "Schoolperiode");

//of volgende
$ntranslations = count($atranslations); //of $ntranslations = 88

echo fcontent($ntranslations, "english", "Schoolperiode");

Een foreach loop kan ik niet gebruiken omdat de array er als volgt uitziet: $atranslations[x]["taal"]

Het probleem zit er hem gewoon in dat er geen enkele variabele in de functie kan meegegeven worden die niet binnen de functie gedeclareerd is.
 
Wat je probeert te bereiken lijkt mij enorm omslachtig, en helemaal niet logisch...
het nut van dit array verhaal is zodat woorden op een website in meerdere talen beschikbaar zouden moeten zijn?
waarom zet je de woorden dan niet gewoon in een database, en vraag je alle woorden van de gewenste taal op zoals ik al eens eerder geopperd heb?

met een $array[x][y] formaat kun je ook prima een foreach loop uitvoeren,

PHP:
foreach ($arrays as $eerste_array) {
    // Hierbinnen zijn de "x"-arrays gekoppeld aan de $eerste_array variabele
    foreach($eerste_array as $waarde) {
        //hierbinnen staan de "y" componenten in de $waarde variabele
    }
}
Ik zie even niet in waarom je de lengte van de array aan de functie mee wilt geven?
Kun je eens het stuk code kopieren waar je de array vult?

Zo ziet je array er momenteel uit;

Code:
Array ( [0] => 
	Array ( [english] => Belgian 
	[dutch] => Belgische 
	[french] => Belge 
	[german] => Belgische 
	[spanish] => Belga 
	[italian] => Belga 
	[portugese] => 
	[russian] => 
	[japanese] =>
	[chinese] => 
        ........
[1] => Array ( 
	[english] => French
	[dutch] => Franse 
	[french] => Fran�ais 
	[german] => Franz�sische
	[spanish] => Franc�s
	[italian] => Francese 
	[portugese] =>
	[russian] => 
	[japanese] => 
	[chinese] => 
        .........
[2] => Array ( 
	[english] => German
	[dutch] => Duitse 
	[french] => Allemand 
	[german] => Deutsche
	[spanish] => Alem�n
	[italian] => 
	[portugese] =>
	[russian] => 
	[japanese] =>
	[chinese] =>

de eerste 6 talen bevatten woorden, de rest niet.
Zou je nu bijvoorbeeld het spaanse woord "Belga" willen printen, dan kan dat als volgt

PHP:
print $array[0]["spanish"];       // Output: Belga
print $array[2]["french"];        // Output: Allemand

de "0" geeft in dit geval aan om welk woord het gaat.
 
Laatst bewerkt:
Alles zit in een tabel in mijn database en wordt er als volgt uit gehaald en in de array gestoken.

PHP:
$atranslationssql = "SELECT * from translations";
$atranslationsquer = mysql_query($atranslationssql, $sdb) or die(mysql_error());

while ($atranslationsline = mysql_fetch_object($atranslationsquer)) {
	$ntranslations = count($atranslations);
	$atranslations[$ntranslations]["english"] = $atranslationsline->english;
	$atranslations[$ntranslations]["dutch"] = $atranslationsline->dutch;
	$atranslations[$ntranslations]["french"] = $atranslationsline->french;
	$atranslations[$ntranslations]["german"] = $atranslationsline->german;
	$atranslations[$ntranslations]["spanish"] = $atranslationsline->spanish;
	$atranslations[$ntranslations]["italian"] = $atranslationsline->italian;
	$atranslations[$ntranslations]["portugese"] = $atranslationsline->portugese;
	$atranslations[$ntranslations]["russian"] = $atranslationsline->russian;
	$atranslations[$ntranslations]["japanese"] = $atranslationsline->japanese;
	$atranslations[$ntranslations]["chinese"] = $atranslationsline->chinese;
	$atranslations[$ntranslations]["finnish"] = $atranslationsline->finnish;
	$atranslations[$ntranslations]["czech"] = $atranslationsline->czech;
	$atranslations[$ntranslations]["danish"] = $atranslationsline->danish;
	$atranslations[$ntranslations]["greek"] = $atranslationsline->greek;
	$atranslations[$ntranslations]["hungarian"] = $atranslationsline->hungarian;
	$atranslations[$ntranslations]["indonesian"] = $atranslationsline->indonesian;
	$atranslations[$ntranslations]["icelandic"] = $atranslationsline->icelandic;
	$atranslations[$ntranslations]["korean"] = $atranslationsline->korean;
	$atranslations[$ntranslations]["norwegian"] = $atranslationsline->norwegian;
	$atranslations[$ntranslations]["polish"] = $atranslationsline->polish;
	$atranslations[$ntranslations]["romanian"] = $atranslationsline->romanian;
	$atranslations[$ntranslations]["serbian"] = $atranslationsline->serbian;
	$atranslations[$ntranslations]["slovenian"] = $atranslationsline->slovenian;
	$atranslations[$ntranslations]["slovak"] = $atranslationsline->slovak;
	$atranslations[$ntranslations]["swedish"] = $atranslationsline->swedish;
	$atranslations[$ntranslations]["turkish"] = $atranslationsline->turkish;
	$atranslations[$ntranslations]["ukrainian"] = $atranslationsline->ukrainian;
	$atranslations[$ntranslations]["vietnamese"] = $atranslationsline->vietnamese;
	$atranslations[$ntranslations]["tai"] = $atranslationsline->tai;
	$atranslations[$ntranslations]["estonian"] = $atranslationsline->estonian;
	$atranslations[$ntranslations]["filipino"] = $atranslationsline->filipino;
	$atranslations[$ntranslations]["hebrew"] = $atranslationsline->hebrew;
	$atranslations[$ntranslations]["hindi"] = $atranslationsline->hindi;
	$atranslations[$ntranslations]["georgian"] = $atranslationsline->georgian;
	$atranslations[$ntranslations]["mongolian"] = $atranslationsline->mongolian;
	$atranslations[$ntranslations]["persian"] = $atranslationsline->persian;
};

De eerste keer dat je de foreach loop aanhaalde, begreep ik het niet goed omdat je slechts 1 array aansprak en niet de tweede.
 
Laatst bewerkt:
Dank je wel voor de hulp, DoRcO. Ik heb het idee dat je geopperd hebt om alleen de te gebruiken taal te laden uitgewerkt, en dat werkt zoveel beter dan wat ik probeerde werkend te krijgen.
Hier is de oplossing:

PHP:
$stranslationssql = "SELECT * from translations";
$atranslationsquer = mysql_query($stranslationssql, $sdb) or die(mysql_error());

	  
switch ($slang) {
	case "en":
	  while ($atranslationsline = mysql_fetch_object($atranslationsquer)) {
		  $ntranslations = count($atranslations);
		  $atranslations[$ntranslations] = $atranslationsline->english;
	  }
	  break;
	case "nl":
	  while ($atranslationsline = mysql_fetch_object($atranslationsquer)) {
		  $ntranslations = count($atranslations);
		  $atranslations[$ntranslations] = $atranslationsline->dutch;
	  }
	  break;
	case "fr":
	  while ($atranslationsline = mysql_fetch_object($atranslationsquer)) {
		  $ntranslations = count($atranslations);
		  $atranslations[$ntranslations] = $atranslationsline->french ? $atranslationsline->french : $atranslationsline->english;
	  }
	  break;
	case "de":
	  while ($atranslationsline = mysql_fetch_object($atranslationsquer)) {
		  $ntranslations = count($atranslations);
		  $atranslations[$ntranslations] = $atranslationsline->german;
	  }
	  break;
	
	....
	
	default:
	  while ($atranslationsline = mysql_fetch_object($atranslationsquer)) {
		  $ntranslations = count($atranslations);
		  $atranslations[$ntranslations] = $atranslationsline->dutch;
	  }
}

Daarna zet ik gewoon waar een woord of zin moet komen
PHP:
<?php echo $atranslations[n]; ?>
Werkt perfect.

De taal detecteer ik met
PHP:
<?php $slang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); ?>

Nu komt het volgende waar ik geen raad mee weet, maar dat stel ik in een nieuwe vraag.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan