Autor Zpráva
jansfabik
Profil
Dobrý den,
řeším jeden problém s php. Potřeboval bych vědět jestli neexistuje fce, která by mi našla ve vícerozměrném poli položku podle zadaných klíčů.
Zdrojový kód lepší pochopení:
global $lang;
$lang = array ();
$lang ['administrace'] = array (
     0 => 'Administrace',
     'menu' => array (
          0 => 'Menu',
          'system' => 'Správa systému'
     )
);

function lang () {
     global $lang;
     $args = func_get_args ();
     ... tady potřebuji pomoc ...
}

Příklad:
lang ('administrace', 'menu') vrátí 'Menu'
lang ('administrace', 'menu', 'system) vrátí 'Správa systému'
Radim Hejhal
Profil
Zdravím, jeslti jsem to dobře pochopil, mělo by to jít naprosto jednoduše:
$lang['administrace']['menu'][0]
$lang['administrace']['menu']['system']

Tzn. že žádná funkce na to není třeba, pokud jsou známé klíče.
jansfabik
Profil
to je sice pravda, ale pak je tam problém s tou globální proměnnou, a to je potom hodně dlouhý kód, a je to nepřehledné:
$GLOBALS['lang']['administrace']['menu']['system']


a navíc mě napadlo, že bych to potom ještě časem rozšířil nějak takhle:
$lang = array (
    'en' => array (...),
    'cz' => array (...)
);
$currentLang = 'cz';

a to by bylo už hodně nepřehledné

tak jsem to vyřešil takto:
function lang () {
    global $lang;
    $args = func_get_args ();
    if (!$args) {
        return NULL;
    }
    $count = coun ($args);
    $result = $lang;
    for ($i = 0; $i < $count; $i ++) {
        $result = $result [$args [$i]];
    }
    if (is_array ($result)) {
        $result = $result [0];
    }
    return $result;


ale zdá se mi, že to bude pomalé, nevíte někdo, jestli to nejde vyřešit nějak lépe, třeba přesunováním ukazatele?
tiso
Profil
jansfabik - ak potrebuješ iba časť poľa, tak že ho prekopíruješ:
$lang=array(...)//tvoje dlhe pole, obsahuje napriklad polozku $lang['en']['admin']['nav']['system']='blabla'
...
$copy_nav=$lang['en']['admin']['nav'];// teraz je ta polozka v $copy_nav['system']

Ďalšia možnosť je použiť oddelené polia (napríklad pre jazykové verzie), ušetríš si jeden rozmer:
$lang='en';//jazyk ktory chcem pouzit (mozem ho ziskat s url, cookie, ...)
include $lang.'.inc.php'; //obsahuje len anglicke nazvy
jansfabik
Profil
tiso děkuji za radu, to mi stačí

Ďalšia možnosť je použiť oddelené polia (napríklad pre jazykové verzie), ušetríš si jeden rozmer:

$lang='en';//jazyk ktory chcem pouzit (mozem ho ziskat s url, cookie, ...)
include $lang.'.inc.php'; //obsahuje len anglicke nazvy

mám je v několika souborech, ale protože by to dělalo při výpisu jazyků pro volbu jazykové verze problémy (v každém souboru je i informace o názvu jazyka a jeho vlajka v base64), tak jsem to udělal trošku jinak:

$GLOBALS ['lang_'.$lang]


děkuji za pomoc

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: