Jump to content

variable variable array call how?


mrbean

Recommended Posts

hi all,

 

I have an language pack for example:

languages/en.php:

$en['mail']['letter closing'] = "regards,\n your friend!";

 

and in my config:

$language = "en";
$include_language = @include("languages/".$language.".php");
if(!($include_language))
{
    $try_default_language = @include("languages/nl.php");
    if(!($try_default_language))
    {
        echo "kan de taalpakket niet vinden<br>";
        echo "Could not find the language pack.<br>";
        echo "example on error: ".$test." shows nothing";
        exit;
    }
}

 

In my function I want to include the language pack for example i have $language = 'en' so I want to include $en['general']['letter closing']

 

I will do this:

global $language,${$language}['general'];

 

But that gives an error unexpected '[' blah blah.

 

How can i call the variable variable array in the valid php way?

Link to comment
Share on other sites

$language = "en";

if(${$language} == $en) TRUE

so

becomes

$en['general']['letter closing']

 

but it will give an error if i do

global ${$language}['general']['letter closing']; // this will not work

same as:

global $en['general']['letter closing']; // this will work

 

do you understand what i am trying to do?

 

so my question is:

How can i call the variable variable array in the valid php way?

Link to comment
Share on other sites

You are making this harder than needed.

 

Each language file should use the same array name so that after you include the correct language file, you don't need to do anything else in your code.

 

In the en.php file you would have -

$lang['mail']['letter closing'] = "regards,\n your friend!";

 

In the spanish.php file you would have -

$lang['mail']['letter closing'] = "lo que se refiere,\n su amigo!"

 

You would always reference $lang['mail']['letter closing'] in your code to access the correct phrase for the language file that was included.

Link to comment
Share on other sites

I do making this harder than needed, but I want to learn that so in other cases when I'ts not possible to make it easier it will be usefull.

I will do it the way u said but I don't see this as solved so I will keep this open for other suggestions.

Link to comment
Share on other sites

Variable variables take three times longer to execute, so they are a poor choice when there are other ways of accomplishing the same task.

 

From the php.net documentation for what you are trying to do -

In order to use variable variables with arrays, you have to resolve an ambiguity problem. That is, if you write $$a[1] then the parser needs to know if you meant to use $a[1] as a variable, or if you wanted $$a as the variable and then the [1] index from that variable. The syntax for resolving this ambiguity is: ${$a[1]} for the first case and ${$a}[1] for the second.

 

 

Link to comment
Share on other sites

In order to use variable variables with arrays, you have to resolve an ambiguity problem. That is, if you write $$a[1] then the parser needs to know if you meant to use $a[1] as a variable, or if you wanted $$a as the variable and then the [1] index from that variable. The syntax for resolving this ambiguity is: ${$a[1]} for the first case and ${$a}[1] for the second.

second case example:

${$language}['succesfull login'];

 

 

So i did it on the correct way but the php parser will give an error in other words an bug?

Link to comment
Share on other sites

Probably because you're trying to access an item from your array when defining ${$language}['succesfull login'] as global. You cannot defined an array item as global only variables can be defined as global.

 

You should ideally pass your variables to your function rather than define them as global.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.