Associative Array vullen met variabelen

Status
Niet open voor verdere reacties.

Deparis

Gebruiker
Lid geworden
18 apr 2013
Berichten
80
Hi!
Ik probeer een Associative Array te maken die geschikt is voor een script met meerdere talen.. (Nederlands, Engels, Duits enz).
Code:
$condition = array(
            12 * 30 * 24 * 60 * 60 =>  'year',
                30 * 24 * 60 * 60  =>  'month',
                24 * 60 * 60         =>  'day',
                60 * 60                =>  'hour',
                60                       =>  'minute',
                1                         =>  'second' );

Deze code doet het prima... maar nu krijg ik het maar niet voor elkaar om de waardes year, month enz. te vervangen door variabelen uit de language file.. zoals
$lang['year']
$lang['month']
enz.

heb het geprobeerd met:
12 * 30 * 24 * 60 * 60 => '$lang['year']',
12 * 30 * 24 * 60 * 60 => $lang['year'],
12 * 30 * 24 * 60 * 60 => '.$lang['year'].',

$lang1 = $lang['year'];
12 * 30 * 24 * 60 * 60 => '$lang1',
12 * 30 * 24 * 60 * 60 => $lang1,

Ik heb van alles geprobeerd maar krijg het niet voor elkaar..
Weet iemand hier een oplossing voor?
 
Laatst bewerkt:
Variabelen horen buiten quotes! :)
 
Thanks voor de snelle reactie!
Ik heb met voorbeeld:
12 * 30 * 24 * 60 * 60 => $lang['year'],
en
12 * 30 * 24 * 60 * 60 => $lang1,

de variabel toch buiten de quotes staan?
 
Ja, dat klopt!
 
Dat is vreemd, dan heeft die variabele geen waarde, lijkt me. Of je moet eerst je berekening maken, en opslaan in een variabele, kan ik mij ook indenken.

Laat al je relevante code zien die je nu hebt?
 
Laatst bewerkt:
oke zal ik doen.. hier is de functie waarmee ik bezig ben:
de $time haal ik uit de database.

Code:
function timeago( $time )
{
    $time_difference = time() - $time;

 if( $time_difference < 1 ) { return 'less than 1 second ago'; }
   $condition = array( 12 * 30 * 24 * 60 * 60 =>  'year',
               30 * 24 * 60 * 60       =>  'month',
               24 * 60 * 60            =>  'day',
               60 * 60                 =>  'hour',
               60                      =>  'minute',
               1                       =>  'second'
  );

 foreach( $condition as $secs => $str )
    {
        $d = $time_difference / $secs;

        if( $d >= 1 ){
            $t = round( $d );
			
			if($t > 1){
			
            return $t . ' ' . $str . ' ago';
        }
    }
}

dit werkt prima.. wil ik dus het engels year month enz. meertalig maken dan lukt dat niet met een variable. (zie voorgaande berichten)

Ik heb de vermenigvuldiging al geprobeerd te vervangen door het totaal..
 
Ah, je gebruikt het in een functie. Dan werken variabelen van buitenaf niet. Je kan ze met global wel in je functie aanroepen, of nog netter: in je argument van de functie.
 
Dan werken variabelen van buitenaf niet.
krijg nou wat.. dat wist ik niet.. weer wat geleerd :thumb:
many thx PHP4U.. ik ga ermee aan de slag en laat het weten alhier of het gelukt is.
 
Top! Houd ons op de hoogte of het lukt!
 
Nu werkt het prima!, alhier de werkende multi language timeago functie:
Ik gebruik alleen het aantal sec, minuten, uren en dagen geleden, maar je kunt onderstaande functie ook uitbreiden naar weken, maanden enz.
Code:
// om de zaak een beetje overzichtelijk te houden eerst verkorte taal variabelen maken. 
// hier Nederland maar kan dus ook Engels enz. zijn afhankelijk welke taal file actief is.

$lang1 = $lang['timeago1'];    // dag
$lang2 = $lang['timeago2'];    // uur
$lang3 = $lang['timeago3'];    // minuut
$lang4 = $lang['timeago4'];    // seconde
$lang5 = $lang['timeago5'];    // dagen
$lang6 = $lang['timeago6'];    // uren
$lang7 = $lang['timeago7'];    // minuten
$lang8 = $lang['timeago8'];    // seconde
$lang9 = $lang['timeago9'];    // geleden


// de functie zelf.

function timeago( $time, $lang1, $lang2, $lang3, $lang4, $lang5, $lang6, $lang7, $lang8, $lang9 )
{
    $time_difference = time() - $time;

  $condition = array( 
                '86400'            =>  $lang1,
                '3600'                 =>  $lang2,
                '60'                      =>  $lang3,
                '1'                       =>  $lang4
              );

    foreach( $condition as $secs => $str )
    {
        $d = $time_difference / $secs;

        if( $d >= 1 )
        {
            $t = round( $d );
			
			if($t > 1){
			
			if($str == $lang1)$str = $lang5;
			if($str == $lang2)$str = $lang6;
			if($str == $lang3)$str = $lang7;
			if($str == $lang4)$str = $lang8;
			
			}
			
            return $t.' '.$str.' '.$lang9 ;
        }
    }
}


// de functie aanroepen met:
// $row['posttime'] komt uit de database en is in UNIX time format.

echo timeago($row['posttime'], $lang1, $lang2, $lang3, $lang4, $lang5, $lang6, $lang7, $lang8, $lang9);

Thx PHP4U :)
 
Je kan ook een array maken die $lang heet. Dan hoef je niet een grote hoeveelheid variabelen in je functie argument te proppen.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan