【问题标题】:PHP array of array with string as index以字符串为索引的数组的 PHP 数组
【发布时间】:2015-08-02 16:56:51
【问题描述】:

我不是 PHP/MySql 方面的专家,所以我对如何处理具有多种语言的网站并使 PHP 代码可读的第一个想法如下:

1) 创建一个包含“word、en、it、de、fr”字段的表,每个字段对应我要翻译的每个字符串。例如:

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

2) 将表存储在字符串数组中,以便我可以通过这种方式访问​​它:

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

恕我直言,这将使 PHP 代码非常易读(性能并不重要)。

所以,我写了这段代码来从数据库中读取数据,如果翻译为空,我用“XX中的单词丢失”填充数组(为了避免粘贴所有相同的代码,我只显示你一个案例):

 $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...
 }   

我尝试添加双引号,我尝试删除它们...但是每次我打印 $w 变量时,总是为空。从 DB 中读取的中间变量看起来没问题。

我做错了什么?谢谢。

【问题讨论】:

  • 那么当你打印它的时候呢?在while 循环之后?
  • 是的。甚至直接打印单个元素(如提供的示例中)也不会做任何事情:(
  • 您绝对不需要在 "$word""$it" 周围加上引号。
  • 如果var_dump($r) - 它显示了什么?
  • while ($r = $result->fetch_array(MYSQLI_ASSOC)) { 之后添加var_dump($r) - 你看到了什么?

标签: php arrays key


【解决方案1】:

测试一下。

<?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 编辑:虚拟文本,因为 SO 不允许我修改单个字符;)

【讨论】:

  • 谢谢 :) 我刚刚删除了一个额外的“;” (在“?”的第一种情况下分配之后)并且它有效......但我仍然不知道我的代码有什么问题:)
  • $w[$word]["it"] = $it;
  • 啊哈哈 :) 我应该在午夜之后停止编码。我应该在午夜之后停止编码。我应该在午夜之后停止编码。没有其他人注意到它:) 再次感谢。
猜你喜欢
  • 1970-01-01
  • 2014-11-25
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 2013-09-17
  • 2017-12-01
  • 2013-03-31
  • 1970-01-01
相关资源
最近更新 更多