/ / PHP pole poľa s reťazcom ako indexom - php, polia, kľúč

PHP pole poľa s reťazcom ako index - php, polia, kľúč

Nie som odborník na PHP / MySql, takže môj prvý nápad, ako zvládnuť webovú stránku s viacerými jazykmi a urobiť čitateľný kód PHP, bol nasledujúci:

1) Vytvorenie tabuľky s poľami „word, en, it, de, fr“, jedno pre každý reťazec, ktorý chcem preložiť. Napríklad:

 WORD        EN        IT        DE        FR
title       HomePage  Pagina              No Idea
thanks      Thank You Grazie    Danke     Merci

2) Uloženie tabuľky do poľa reťazcov, aby som k nemu mohol získať prístup týmto spôsobom:

 print $word["thanks"]["it"];

vďaka čomu by IMHO urobil kód PHP veľmi dobre čitateľným (výkon NIE JE DÔLEŽITÝ).

Takže som tento kód napísal, aby som prečítal údaje zDB, a ak je preklad prázdny, vyplním pole textom „slovo v XX chýba“ (aby som neprilepil všetok identický kód, zobrazujem vám iba jeden prípad):

 $s = "SELECT word, it, en, de, fr FROM languages";
$result = $conn->query($s);
while ($r = $result->fetch_array(MYSQLI_ASSOC)) {
$word = $r["word"];
$it = $r["it"];
// and DE and EN and FR...
if ($it != "")
$w["$word"]["$it"] = $it;
else
$w["$word"]["$it"] = $word." IT missing";
// and DE and EN and FR...
}

Skúšal som vložiť úvodzovky, pokúsil som sa ich odstrániť ... Ale zakaždým, keď vytlačím premennú $ w, je VŽDY prázdny. Medzilehlé premenné načítané z DB vyzerajú dobre.

Čo robím zle? Ďakujem.

odpovede:

3 pre odpoveď č. 1

Vyskúšajte to.

<?php
$s = "SELECT word, it, en, de, fr FROM languages";
$result = $conn->query($s);
$languages = array("it", "en", "de", "fr");
while ($r = $result->fetch_array(MYSQLI_ASSOC)) {
foreach ($languages as $lang) {
$word = strval(trim($r["word"]));
$translated_word = strval(trim($r[$lang]));
(strlen($translated_word) > 0) ? $w[$word][$lang] = $translated_word :
$w[$word][$lang] = $word . " " . strtoupper($lang) . " missing";
}
}

ZioBit editácia: Fiktívny text, pretože SO mi nedovolí upraviť jediný znak;)