从php访问json_decode数组值

时间:2019-02-11 17:19:53

标签: arrays json localization

我正在尝试对每个虚拟页面数据使用Json在平面文件MVC(Slim&Twig)上设置简单的本地化。 我获取(将PHP json-decode函数设置为true)一个外部json格式的数据文件,并且在查找访问json解码后的数组的最简单方法时遇到了问题,因此在代码中直接访问外部化文本很困难。

我曾经有一个具有不同语言版本的xml平面文件,现在我转向JSON格式的数据文件。我找到了一种访问数组的方法,但我正在寻找一种更简单的方法来设置JSON结构和通过json_decode提供的返回数组访问数据。 这是我的Json文件:

{
"title": [
  { "fr" : "VERSION FRANCAISE FR" },
  { "en" : "English IN ENGLISH"  },
  { "es": “Spanish Version” }
],
"description":[
  { "fr"  :"FR DESCRIPTION" },
  { "en"  :"ENGlish DESCRIPTION"  },
  { "es"  :"ES DESCRIPTION" }
],
"keywords":[
  { "fr"  :"mot clés, séparés par virgules, mots clés" },
  { "en"  :"keywords, ENGlish keywords"  },
  { "es"  :"en espagnol" }
]
}

这是我用来访问数据的代码:

$file =“meta.json”;
$str = file_get_contents($_SERVER['DOCUMENT_ROOT'].$file)
$meta = json_decode($str, true);

//访问$ meta数组

// this works
echo $meta['title'][0]['fr'];
echo $meta['title'][1]['en'];
echo $meta['title'][2]['es'];

// this doesn’t
echo $meta['title']['fr'];
echo $meta['title']['en'];
echo $meta['title']['es'];

也许我可以将语言放在数组和标题的顶部,说明如下

  {
    "fr": [
      { "title" : "VERSION French" },
      { "description" : "French"  },
      { "keywords": "french" }
    ],
    "en":[
      { "title" : "VERSION EN" },
      { "description" : "ENGlish IN ENGLISH"  },
      { "keywords": "English" }
    ],
    "es":[
      { "title" : "Spanish version" },
      { "description" : "Description ES"  },
      { "keywords": "keywords in ES" }
    ]
    } 

但是同样的问题来了,我不得不写 echo $ meta ['fr'] [0] ['title']; 获得法文标题

所以问题是有办法解决这个问题,因此我可以使用简单的有意义的语法,例如$ meta ['fr'] ['title'];并且不必与数值索引相关。

任何帮助将不胜感激。 谢谢!

1 个答案:

答案 0 :(得分:0)

您的数字数组似乎是多余的。如果您的键是唯一的,则像在第一个示例中一样,将它们用作键,除了不将对象包装在[]-

{
  "fr": {
    "title" : "VERSION French",
    "description" : "French"
    "keywords": "french"
  }
},

然后,您可以按照以下建议访问它们:$meta['fr']['title']