Модифицированный обход дерева предзаказа - упорядочить детей по счету - PullRequest
1 голос
/ 02 апреля 2012

Таким образом, я смог вывести данные так, как я хочу, но теперь я хочу изменить их в зависимости от оценки отдельных предметов. Итак, сейчас я вывела что-то вроде этого:

<ol>
 Item1
    <ol>
     subitem1A
        <ol>
         subsubitem1A
        </ol>
    </ol>
    <ol>
     subitem1B
    </ol>
</ol>
<ol>
 Item2
</ol>

Я получаю это, помещая левые и правые значения в массив и повторяя его. Если это левое значение, оно выдает <ol>item, а если оно правое, оно закрывает с помощью </ol>

Используя приведенный выше пример, я хочу, чтобы Item2 имел лучший результат, чем Item1, Item2 будет первым, а Item1 со всеми его потомками - после него. Если subitem1B имеет лучший результат, чем subitem1A, subitem1B будет до subitem1A и всех его потомков.

Я не уверен, что мне нужно было бы что-то делать с запросом БД или чем-то еще до запуска цикла, который помещает все html в переменную для вывода, но я думал о том, что если бы у меня был какой-то вывод, я может проверить на наличие <ol>, которые являются прямыми потомками родителя <ol>. Поэтому, если я посмотрю на subitem1A и увижу его родителя Item1, то поищите любого <ol>, у которого есть родитель Item1, проверьте счет, а затем упорядочите соответственно. Я не знаю, возможно ли это, но это был мой мыслительный процесс.

edit - Добавление дополнительной информации по запросу.

Я делаю этот запрос:

$sql = "SELECT * FROM table WHERE uCId = '$uCId' AND lft BETWEEN 2 AND '$max' ORDER BY lft ASC";
$result = mysql_query($sql);

Тогда:

$ol = array();
$html = "";
while ($row = mysql_fetch_array($result)) {          
        $ol[$row['lft']] = array('type'=>'open',
                                    'text'=>$row['text']
                                    //and more stuff like score, date, etc 
                                    );
        $ol[$row['rgt']]  = array('type'=>'close');
    }
$olCount = count($ol);
for ($d=2; $d<=$olCount; $d++) {
        if ($ol[$d]['type'] == 'open') {
            $html.= '<ol>various html'.$ol[$d]['text'].'various html';
                    }else{
                          $html .= '</ol>';
                    }

По сути, я просто пропустил некоторые html, которые просто усложнили бы чтение. Счет может быть размещен где угодно. идентификатор для <ol> может быть счетом или чем-либо еще. Что бы ни работало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...