使用占位符从PHP中的嵌套JSON文件中获取值

Get Value from nested JSON File in PHP with Placeholder

提问人:Natali 提问时间:11/23/2022 最后编辑:Natali 更新时间:11/28/2022 访问量:97

问:

我想编写自己的小翻译函数。

我的 JSON 文件如下所示:

{
"start": {
  "body": {
    "headline": "Hello, world!"
   }
  }
}

在我的PHP前端中,我只想为翻译的字符串编写占位符。所以 id do

<h1><?php trans('start.body.headline'); ?></h1>

我的PHP函数很简单,看起来像:

function trans($string) {

    if (!isset($_GET['langID']))
        $lang = 'de';
    else
        $lang = $_GET['langID'];

    $str = file_get_contents('lang/'. $lang . '.json');
    $json = json_decode($str);
    $string = str_replace('.', '->', $string);
 
    echo $json->$string;

  }

但我没有得到结果。

My Function 中的$string正确:

start->body->headline

当我写的时候:

echo $json->start->body->headline;

我得到“你好,世界”。

echo $json->$string; 

是一样的,但不起作用。为什么?

php json 对象 嵌套 占位符

评论


答:

0赞 Gev99 11/23/2022 #1

由于您正在为函数参数使用某个变量名称$string,请在此处使用其他变量名称。

$keyword = str_replace('.', '->', $string);

echo $json->{$keyword};

您也可以使用返回方法

function trans($string) {

if (!isset($_GET['langID']))
    $lang = 'de';
else
    $lang = $_GET['langID'];

$str = file_get_contents('lang/'. $lang . '.json');
$json = json_decode($str);
$keyword = str_replace('.', '->', $string);

return $json->{$keyword};
}

而不是在 HTML 中使用短方式 echo

<h1><?= trans('start.body.headline'); ?></h1>