foreach循环找不到json对象的值并显示在php页面上

foreach循环找不到json对象的值并显示在php页面上,php,json,foreach,Php,Json,Foreach,我在data/clients.json文件中获得了一些数据,我正在尝试获取一些键和值,并将它们显示在我的php文件中。它不起作用,我也不明白为什么 My clients.json文件如下所示: { "data": { "nikajakubec": { "name": "nika", "loans": { "amount": "1000", "reason": "

我在data/clients.json文件中获得了一些数据,我正在尝试获取一些键和值,并将它们显示在我的php文件中。它不起作用,我也不明白为什么

My clients.json文件如下所示:

{
    "data": {
        "nikajakubec": {
            "name": "nika",
            "loans": {
                "amount": "1000",
                "reason": "for garden"
            }
        }
    }
}
和我的PHP文件:

 <?php
  $sData = file_get_contents('data/clients.json');
  $jData = json_decode($sData);
  $jClient = $jData->data->$sUsername;
  foreach ($jClient->loans as $jLoans) {
      echo  " 
            <div>
              <div>Amount:$jLoans->loans-></div>
              <div>Reason:$sUserName->reason</div>
              </div>";
  } 


  ?>

这样做:-

<?php

$json = '{
    "data": {
        "nikajakubec": {
            "name": "nika",
            "loans": {
                "amount": "1000",
                "reason": "for garden"
            }
        }
    }
}';

$jData = json_decode($json);
  foreach ($jData->data as $user) {
      echo  " 
            <div>
              <div>Amount:". $user->loans->amount ."</div>
              <div>Reason: ". $user->loans->reason ."</div>
              </div>";
  }

字段
原因
实际上嵌套在
贷款
属性中,而不是直接嵌套在用户中

所以不是
$sUserName->reason
走吧
$jLoans->reason

也可以使用
$jLoans->amount
代替
$jLoans->loans->


考虑一下,当您循环使用
$jClient->loans
时,您将处理
loans
的每个道具,即“金额”和“原因”

您是否可以检查该JSON文件,如果您添加
echo JSON_last_error()
JSON_last_error_msg(),该文件看起来不是有效的JSON文件
根据您的描述,您可能会获得有关错误的帮助,这可能不是主要问题,但我认为“原因”也应该是
$jLoans->Reason
(而不是
$sUserName
)非常感谢您,它现在可以工作了!!!我可以问一个简短的问题来了解它是如何工作的或者你很忙吗?非常感谢。好的,伙计们。现在一切都好了,非常感谢!但我就是不明白。。我的意思是,如果我试图找到每一个$sUserName(在本例中是nikajakubec)及其$jloan,为什么它要与foreach($jData->data as$jloan)一起工作。为什么它不能像$jData->data->sUserName那样使用$jLoans?谢谢在Reason中引号后面的点是什么意思:“.jLoans->loans->Reason.”是什么意思?在这之后我不会再打扰你了:D@PetraJakub第一个问题->因为它是一个多维数组,这就是为什么它不能与
$jData->data->$sUserName
一起工作,因为
$sUserName
在json数据中没有位置。2个问题:-
用于连接php变量和字符串。现在一切正常,非常感谢!但我就是不明白。。我的意思是,如果我试图找到每一个$sUserName(在本例中是nikajakubec)及其$jloan,为什么它要与foreach($jData->data as$jloan)一起工作。为什么它不能像$jData->data->sUserName那样使用$jLoans?谢谢foreach的
foreach
接受一个参数,该参数可以是数组/对象等,并允许您在该“列表”的每个元素上循环。在循环过程中引用当前正在处理的项可能很困难,因此它允许您使用
as
定义别名,以定义如何调用当前项。因此,如果您编写类似于
foreach($jData->data->data->$sUserName作为$jLoans)
的东西,您将循环使用
$sUserName
元素的所有道具,它们是
数量
原因
。您将像这样访问它们:
$jLoans->amount
$jLoans->reason
N.B.
$jLoans
与另一个变量一样只是一个变量名,它不是“严格的”。您还可以编写
foreach($jData->data->sUserName as$goofy)
,然后调用
$goofy->amount
。重要的是你正在骑的自行车和当前项目的道具/项目。如果仍然不清楚,请阅读更多关于循环的文档