這是我第一次使用 Stackoverflow,所以如果我的問題不清楚,請多多包涵!我正在嘗試從 tblproperty 獲取所有行并回圈遍歷陣列以將其轉換為關聯陣列。獲取屬性后,我將檢查該屬性是否屬于頁面或物件。如果頁面的屬性if我們在propertiesArray中添加相同的。如果屬性是物件,我正在檢查物件是否是另一個父物件的頁面或子物件。下面的代碼適用于 3 個級別(意味著父 > 子 > 子 > 子)。但是,如果物件是另一個父物件,我需要改進它以連續回圈。需要建議我該如何改進它。下面的代碼在服務器端的 PHP 中。我想把它帶到客戶端。在 Angular JS 中執行此操作的任何方式。在此先感謝所有選擇提供幫助的人!
$DBObj->querySelect("*","tblproperty","pgnid = $pageNID and propisactive = 1");
if($DBObj->fetchNumOfRows() >= 1){
$queryRecords = $DBObj->fetchAllRecordsArray();
$rows = $DBObj->fetchNumOfRows();
for($i = 0; $i < $rows; $i ){
//Properties of Objects are Loaded to Object Properties Array
switch ($queryRecords[$i]['propof']){
case "page":{
if(array_key_exists($queryRecords[$i]['propofid'],$propertiesArray) != 1)
$propertiesArray[$queryRecords[$i]['propofid']] = [];
array_push($propertiesArray[$queryRecords[$i]['propofid']],array($queryRecords[$i]['propid'] => $queryRecords[$i]['propvalue'],'proplinkedto' => $queryRecords[$i]['proplinkedto']));
break;
}
case "object":{
$DBObj->querySelect("*","tblobject","pgnid = $pageNID and objisactive = 1 and objnid = ".$queryRecords[$i]['propofnid']);
$queryRecord = ($DBObj->fetchNumOfRows() == 1)?$DBObj->fetchRecordArray():"";
if($queryRecord != "")
switch($queryRecord['objof']){
case "object":{
$DBObj->querySelect("*","tblobject","pgnid = $pageNID and objisactive = 1 and objnid = ".$queryRecord['objofnid']);
$queryRecord1 = ($DBObj->fetchNumOfRows() == 1)?$DBObj->fetchRecordArray():"";
if($queryRecord1 != "")
switch($queryRecord1['objof']){
case "object":{
$DBObj->querySelect("*","tblobject","pgnid = $pageNID and objisactive = 1 and objnid = ".$queryRecord1['objofnid']);
$queryRecord2 = ($DBObj->fetchNumOfRows() == 1)?$DBObj->fetchRecordArray():"";
if($queryRecord2 != "")
switch($queryRecord2['objof']){
case "object":{
if(array_key_exists($queryRecord2['objofid'].$queryRecord1['objofid'].$queryRecord['objofid'].$queryRecords[$i]['propofid'],$propertiesArray) != 1)
$propertiesArray[$queryRecord2['objofid'].$queryRecord1['objofid'].$queryRecord['objofid'].$queryRecords[$i]['propofid']] = [];
array_push($propertiesArray[$queryRecord2['objofid'].$queryRecord1['objofid'].$queryRecord['objofid'].$queryRecords[$i]['propofid']],array($queryRecords[$i]['propid'] => $queryRecords[$i]['propvalue'],'proplinkedto' => $queryRecords[$i]['proplinkedto']));
break;
}
case "page":{
if(array_key_exists($queryRecord1['objofid'].$queryRecord['objofid'].$queryRecords[$i]['propofid'],$propertiesArray) != 1)
$propertiesArray[$queryRecord1['objofid'].$queryRecord['objofid'].$queryRecords[$i]['propofid']] = [];
array_push($propertiesArray[$queryRecord1['objofid'].$queryRecord['objofid'].$queryRecords[$i]['propofid']],array($queryRecords[$i]['propid'] => $queryRecords[$i]['propvalue'],'proplinkedto' => $queryRecords[$i]['proplinkedto']));
break;
}
}
break;
}
case "page":{
if(array_key_exists($queryRecord['objofid'].$queryRecords[$i]['propofid'],$propertiesArray) != 1)
$propertiesArray[$queryRecord['objofid'].$queryRecords[$i]['propofid']] = [];
array_push($propertiesArray[$queryRecord['objofid'].$queryRecords[$i]['propofid']],array($queryRecords[$i]['propid'] => $queryRecords[$i]['propvalue'],'proplinkedto' => $queryRecords[$i]['proplinkedto']));
break;
}
}
break;
}
case "page":{
if(array_key_exists($queryRecords[$i]['propofid'],$propertiesArray) != 1)
$propertiesArray[$queryRecords[$i]['propofid']] = [];
array_push($propertiesArray[$queryRecords[$i]['propofid']],array($queryRecords[$i]['propid'] => $queryRecords[$i]['propvalue'],'proplinkedto' => $queryRecords[$i]['proplinkedto']));
break;
}
}
break;
}
case "element":{
$DBObj->querySelect("*","tblelement","pgnid = $pageNID and elisactive = 1 and elnid = ".$queryRecords[$i]['propofnid']);
$queryRecord = ($DBObj->fetchNumOfRows() == 1)?$DBObj->fetchRecordArray():"";
if($queryRecord != ""){
$DBObj->querySelect("*","tblobject","pgnid = $pageNID and objisactive = 1 and objnid = ".$queryRecord['elofnid']);
$queryRecord1 = ($DBObj->fetchNumOfRows() == 1)?$DBObj->fetchRecordArray():"";
if($queryRecord1 != "")
switch($queryRecord1['objof']){
case "object":{
$DBObj->querySelect("*","tblobject","pgnid = $pageNID and objisactive = 1 and objnid = ".$queryRecord1['objofnid']);
$queryRecord2 = ($DBObj->fetchNumOfRows() == 1)?$DBObj->fetchRecordArray():"";
if($queryRecord2 != ""){
switch($queryRecord2['objof']){
case "object":{
$DBObj->querySelect("*","tblobject","pgnid = $pageNID and objisactive = 1 and objnid = ".$queryRecord2['objofnid']);
$queryRecord3 = ($DBObj->fetchNumOfRows() == 1)?$DBObj->fetchRecordArray():"";
if($queryRecord3 != ""){
switch($queryRecord3['objof']){
case "object":{
break;
}
case "page":{
if(array_key_exists($queryRecord3['objid'].$queryRecord2['objid'].$queryRecord1['objid'].$queryRecord['elid'],$propertiesArray) != 1)
$propertiesArray[$queryRecord3['objid'].$queryRecord2['objid'].$queryRecord1['objid'].$queryRecord['elid']] = [];
array_push($propertiesArray[$queryRecord3['objid'].$queryRecord2['objid'].$queryRecord1['objid'].$queryRecord['elid']],array($queryRecords[$i]['propid'] => $queryRecords[$i]['propvalue'],'proplinkedto' => $queryRecords[$i]['proplinkedto']));
break;
}
}
}
break;
}
case "page":{
if(array_key_exists($queryRecord2['objid'].$queryRecord1['objid'].$queryRecord['elid'],$propertiesArray) != 1)
$propertiesArray[$queryRecord2['objid'].$queryRecord1['objid'].$queryRecord['elid']] = [];
array_push($propertiesArray[$queryRecord2['objid'].$queryRecord1['objid'].$queryRecord['elid']],array($queryRecords[$i]['propid'] => $queryRecords[$i]['propvalue'],'proplinkedto' => $queryRecords[$i]['proplinkedto']));
break;
}
}
}
break;
}
case "page":{
if(array_key_exists($queryRecord1['objid'].$queryRecord['elid'],$propertiesArray) != 1)
$propertiesArray[$queryRecord1['objid'].$queryRecord['elid']] = [];
array_push($propertiesArray[$queryRecord1['objid'].$queryRecord['elid']],array($queryRecords[$i]['propid'] => $queryRecords[$i]['propvalue'],'proplinkedto' => $queryRecords[$i]['proplinkedto']));
break;
}
}
}
break;
}
}
}
}
uj5u.com熱心網友回復:
要遞回地迭代你的物件,你需要......遞回
使用內部條件創建單獨的函式。
- 如果當前專案屬于頁面 - 推送到陣列并回傳
- 如果當前專案屬于物件 - 獲取子元素并再次重復此檢查。
這是偽代碼,調整你需要的方式:
if($DBObj->fetchNumOfRows() >= 1){
$queryRecords = $DBObj->fetchAllRecordsArray();
$rows = $DBObj->fetchNumOfRows();
for($i = 0; $i < $rows; $i ){
recursiveAction($queryRecords[$i]);
}
}
function recursiveAction(&$item, $propertiesArray) {
switch ($item['propof']) {
case 'page':
// No need for that "if" check
$propertiesArray[$item['propofid']][] = [$item['propid'] => $item['propvalue'],'proplinkedto' => $item['proplinkedto']];
break;
case 'object':
$DBObj->querySelect(...);
$queryRecord = $DBObj->fetchNumOfRows() == 1 ? $DBObj->fetchRecordArray() : "";
if (!empty($queryRecord)) {
// Here we convert common part of "object" into recursion
recursiveAction($queryRecord);
}
break;
case 'element':
...
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/464227.html
標籤:javascript php angularjs 哎呀
