首页 > 解决方案 > 从 php 访问 json_decode 数组值

问题描述

我正在尝试使用 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']; 并且不必与数值索引相关。

任何帮助是极大的赞赏。谢谢!

标签: arraysjsonlocalization

解决方案


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

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

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


推荐阅读