PHP зацикливание рекурсивной функции - PullRequest
1 голос
/ 30 сентября 2019

У меня была эта функция зацикливания, и что она делает для извлечения данных, затем отображала результат в формате 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 ]

1 голос
/ 30 сентября 2019

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;
0 голосов
/ 30 сентября 2019

Сначала разбирая проблему, я думаю, что рекурсивная функция ничего не возвращает. Я думаю, что это показательно, когда ваш результат имеет «элементы», как ноль.

...