PHP循环递归函数

时间:2019-09-30 03:30:41

标签: php loops while-loop

我有这个循环功能,它如何获取数据然后以json格式显示结果。在$subArray[]中,我尝试再次调用循环函数,以便可以读取下面是否有任何子节点。但是似乎结果没有显示出预期的效果。

function recursiveNode($ledgerID,$accountID){
  global $ehorsObj;
  $subArray = array();

  $query_get_subchild = " SELECT accountLedgerID, accountID, accountMainID, accountName, active 
                          FROM tblAccAccounts 
                          WHERE accountMain = 'y' 
                          AND accountSub = 'y' 
                          AND accountMainID = '".$accountID."' 
                          AND accountLedgerID = '".$ledgerID."'                     
                          ORDER BY accountName 
";
  $GetResult = $ehorsObj->FetchData($query_get_subchild, $ehorsObj->DEFAULT_PDO_CONNECTIONS);
  while ($row3 = $GetResult->fetch()) {             

    $subArray[] = array('accountLedgerID' => $row3['accountLedgerID'], 'accountID' => $row3['accountID'], 'accountMainID' => $row3['accountMainID'], 'accountName' => $row3['accountName'], 'active' => $row3['active'], 'items' => recursiveNode($ledgerID, $row3['accountID']));

  } 
  header("Content-type: application/json");
  $result = json_encode($subArray);
  echo $result;
}

它显示结果(如下图所示) enter image description here

结果以及我期望的结果

[
  {
    accountLedgerID: "LA1",
    accountID: "LA95",
    accountMainID: "LA5",
    accountName: "SubGroup RunDeposit 1",
    active: "y"
  },
  {
    accountLedgerID: "LA1",
    accountID: "LA2",
    accountMainID: "LA5",
    accountName: "SubGroup RunDeposit 2",
    active: "y",
    item: [
      {
        accountLedgerID: "LA1",
        accountID: "LA125",
        accountMainID: "LA2",
        accountName: "Sub x2 Group RunDeposit 2",
        active: "y",
        items: [ 
          {
            accountLedgerID: "LA1",
            accountID: "LA6",
            accountMainID: "LA125",
            accountName: "Sub x3 Group RunDeposit 2",
            active: "y",
            items: [ ]
          }	
        ]
      }	
    ]
  }
]

2 个答案:

答案 0 :(得分:1)


function fetch_account ($dbresult, $ledgerID, $accountID) {
  $result = array_filter($dbresult, function ($something) use ($ledgerID, $accountID) {
    if ( $something['accountMainID'] == $accountID && $something['accountLedgerID'] == $ledgerID ) {
      return true;
    }
    return false;
  });
  return array_values($result);
}

function recursiveNode($ledgerID,$accountID){
  $testArray = [
    [
      'accountLedgerID' => 'LA1',
      'accountID' => 'LA95',
      'accountMainID' => 'LA5',
      'accountName' => 'SubGroup RunDeposit 1',
      'active' => 'y'
    ],
    [
      'accountLedgerID' => 'LA1',
      'accountID' => 'LA2',
      'accountMainID' => 'LA5',
      'accountName' => 'SubGroup RunDeposit 2',
      'active' => 'y'
    ],
    [
      'accountLedgerID' => 'LA1',
      'accountID' => 'LA125',
      'accountMainID' => 'LA2',
      'accountName' => 'Sub x2 Group RunDeposit 2',
      'active' => 'y'
    ],
    [
      'accountLedgerID' => 'LA1',
      'accountID' => 'LA6',
      'accountMainID' => 'LA125',
      'accountName' => 'Sub x3 Group RunDeposit 2',
      'active' => 'y'
    ]
  ];

  $someArray = fetch_account($testArray, $ledgerID, $accountID);
  $subArray = array();
  $i = 0;
  while (!empty($someArray[$i]) && $row3 = $someArray[$i]) {
    $subArray[] = array(
      'accountLedgerID' => $row3['accountLedgerID'], 
      'accountID' => $row3['accountID'], 
      'accountMainID' => $row3['accountMainID'], 
      'accountName' => $row3['accountName'], 
      'active' => $row3['active'], 
      'items' => recursiveNode($ledgerID, $row3['accountID'])
    );
    $i++;
  } 
  return $subArray;
}

$myArray = recursiveNode('LA1', 'LA5');
$result = json_encode($myArray);
echo $result;

答案 1 :(得分:0)

首先解决问题,我认为递归函数没有返回任何东西。我认为这是指示性的,当您的结果中“项目”为null时。