[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Работа цикла for
vitaver
Ребят, хочу создать список как в проводнике, там с +, нажимаешь на этот плюсик, он открываеться. Вот нашел в нете код, на его примере и хочу сделать, а он выдает мне ошибку Notace: Unde.......(несмогу написать) offset -1 in ......... в стороке которую я выделил красным. Дальше идут такие же ошибки, только с элементами массива, пишет вместо -1 цифры в [].Вот сам код:


<?php
$fr = file("tx/razdel.txt");

//$tmp = "";
//$tmp2 = "";
//$tmp3 = "";
$pos = 0;
for ($i = 0; $i < count($fr); $i++) {
$pos2 = $pos+1;
$pos3 = $pos2+1;
$pos4 = $pos3+1;
$ifs = false;

$ar0 = explode("^", trim($fr[$i-1]));
$ar = explode("^", trim($fr[$i]));
$ar2 = explode("^", trim($fr[$i+1]));
//первое вложение begin
If ($ar[1] <> "") {
If ($ar[1] <> $tmp) {
If ($ar[2] == "") {
echo "
<tr><td><img src='/pixel.gif' width=15 height=15></td>
<td nowrap><img src='images/doc.gif' width=16 height=16 border=0> <a href=\"javascript:selectr('$ar[0]', '$ar[1]');\" class='cap2'>$ar[1]</a></td></tr>
<td></td><td>";
}
Else {
echo "
<tr><td><img id=node$pos src='images/node_plus.gif' width=15 height=15 onClick=\"showtree($pos)\"></td>
<td nowrap><img id=folder$pos src='images/closed.gif' width=16 height=14> $ar[1]</td></tr>
<tr><td></td><td>";
}
$tmp = $ar[1];
}
Else {
If ($ar2[1] <> $ar[1]) {
echo "</td></tr>";
}
}
$ifs = true;
}
//первое вложение end

//второе вложение begin
If ($ar[2] <> "") {
If ($ar[2] <> $tmp2) {
If ($ar0[1] <> $ar[1]) { echo "<table border=0 CELLSPACING=0 CELLPADDING=0 style='display: none' id=table$pos>"; }
If ($ar[3] == "") {
echo "
<tr><td><img src='/pixel.gif' width=15 height=15></td>
<td nowrap><img src='images/doc.gif' width=16 height=16 border=0> <a href=\"javascript:selectr('$ar[0]', '$ar[1] > $ar[2]');\" class='cap2'>$ar[2]</a></td></tr>
<td></td><td>";
}
Else {
echo "
<tr><td><img id=node$pos2 src='images/node_plus.gif' width=15 height=15 onClick=\"showtree($pos2)\"></td>
<td nowrap><img id=folder$pos2 src='images/closed.gif' width=16 height=14> $ar[2]</td></tr>
<tr><td></td><td>";
}
$tmp2 = $ar[2];
}
Else {
If ($ar2[2] <> $ar[2]) {
echo "</td></tr>";
}
}
If ($ar2[1] <> $ar[1]) {
echo "</table>";
}
$ifs = true;
}
//второе вложение end

//третее вложение begin
If ($ar[3] <> "") {
If ($ar[3] <> $tmp3) {
If ($ar0[2] <> $ar[2]) { echo "<table border=0 CELLSPACING=0 CELLPADDING=0 style='display: none' id=table$pos2>\n"; }
If ($ar[4] == "") {
echo "
<tr><td><img src='/pixel.gif' width=15 height=15></td>
<td nowrap><img src='images/doc.gif' width=16 height=16 border=0> <a href=\"javascript:selectr('$ar[0]', '$ar[1] > $ar[2] > $ar[3]');\" class='cap2'>$ar[3]</a></td></tr>
<td></td><td>\n";
}
Else {
echo "
<tr><td><img id=node$pos3 src='images/node_plus.gif' width=15 height=15 onClick=\"showtree($pos3)\"></td>
<td nowrap><img id=folder$pos3 src='images/closed.gif' width=16 height=14> $ar[3]</td></tr>
<tr><td></td><td>";
}
$tmp3 = $ar[3];
}
Else {
If ($ar2[3] <> $ar[3]) {
echo "</td></tr>";
}
}
If ($ar2[2] <> $ar[2]) {
echo "</table>";
}
$ifs = true;
}
//третее вложение end

//четвертое вложение begin
If ($ar[4] <> "") {
If ($ar[4] <> $tmp4) {
If ($ar0[3] <> $ar[3]) { echo "<table border=0 CELLSPACING=0 CELLPADDING=0 style='display: none' id=table$pos3>\n"; }
If ($ar[5] == "") {
echo "
<tr><td><img src='/pixel.gif' width=15 height=15></td>
<td nowrap><img src='images/doc.gif' width=16 height=16 border=0> <a href=\"javascript:selectr('$ar[0]', '$ar[1] > $ar[2] > $ar[3] > $ar[4]');\" class='cap2'>$ar[4]</a></td></tr>
<td></td><td>\n";
}
Else {
echo "
<tr><td><img id=node$pos4 src='images/node_plus.gif' width=15 height=15 onClick=\"showtree($pos4)\"></td>
<td nowrap><img id=folder$pos4 src='images/closed.gif' width=16 height=14> $ar[4]</td></tr>
<tr><td></td><td>";
}
$tmp4 = $ar[4];
}
Else {
If ($ar2[4] <> $ar[4]) {
echo "</td></tr>";
}
}
If ($ar2[3] <> $ar[3]) {
echo "</table>";
}
$ifs = true;
}
//четвертое вложение end


If ($ifs == true) {
$pos = $pos+2;
}
}


?>

И вообще не понимаю логику скрипта, кто по сооброзительней в двух словах объясните пожж?



Спустя 5 минут, 9 секунд (24.02.2009 - 03:38) vitaver написал(а):
Да, да совсем забыл, фаил razdel.txt состаит вот так:

1^Музыка^Хиты^Любэ^Атас
2^Музика^Хиты^ДДТ^Осень
.......
50^Кино^Новинки^Боевики^Стиляги smile.gif

Ну и так далее.

Спустя 1 день, 23 часа, 17 минут, 22 секунды (26.02.2009 - 02:55) vitaver написал(а):
ошибка по аглиски:

Notice: Undefined offset: -1 in (выделенной красным строке)

Спустя 39 минут, 35 секунд (26.02.2009 - 03:35) vitaver написал(а):
И вообще я не понимаю этого:

$ar0 = explode("^", trim($fr[$i-1]));

это как и от куда он начинает считать? Если $i = 0 то ;$ar0 = -1 ведь это тоже не правельно. Уже неделю висит тема так никто мне и не подскажет как это работает? Знатоки php Вас прошу о помоши консультирования!!!!!

Спустя 3 минуты, 55 секунд (26.02.2009 - 03:39) twin написал(а):
Так на первый виток цикла приходится $i = 0; То есть $i-1 = -1; А с отрицательными числами беда...

Спустя 5 минут, 10 секунд (26.02.2009 - 03:44) vitaver написал(а):
Цитата (twin @ 26.02.2009 - 00:39)
Так на первый виток цикла приходится $i = 0; То есть $i-1 = -1; А с отрицательными числами беда...

Так как быть то, вот в чем вопрос? Я выложил на форум потому что самому не хватает сообразить в чем здесь подвох.

Спустя 7 минут, 59 секунд (26.02.2009 - 03:52) twin написал(а):
Я не совсем понял, кто должен открываться. А ставить лень и некогда. Чуть подробнее, если не трудно. Что в файле понятно, а каким должен быть результат?

Спустя 2 часа, 27 минут, 10 секунд (26.02.2009 - 06:19) vitaver написал(а):
результат должен быть как в проводнике XP

+музика
+кино


-музыка
+любэ
+кино
+кино




-музика
-любэ
+хиты
+альбомы
+кино
-кино
+художественные фильмы
+боевики


в принципе вот так, католог и файла razdel.php

Спустя 1 час, 5 минут, 38 секунд (26.02.2009 - 07:25) kirik написал(а):
Не стал трэд читать..

Цитата (vitaver @ 25.02.2009 - 22:19)
результат должен быть как в проводнике XP
Только сегодня написал подобное.

Вот код, если захочешь, можешь пользовать smile.gif Там по структуре массива должно быть понятно все, немного поясню:
Элементы с числовыми индексами < 11, это описание оформления каждого уровня. Элемент с индексом 11 - корневая папка (если нужно). Все остальные буквенные индексы - элементы меню. Они могут быть как просто 'часть_ссылки' => 'Это Название Кнопки', так и массивом такого содержания:
PHP
'часть_ссылки' => array(
    'name' => 'Это Название Кнопки',
    'special' => 'Здесь то, на что заменится {SPECIAL} в оформлении (не обязательный параметр)',
    'sub' => array( // Подменюшки этого меню (не обязательный параметр)
        'sub_menu_1' => 'Название Подменю 1',
        'sub_menu_2' => 'Название Подменю 2',
    )
)

В функцию передается параметр $selected, это массив в котором по уровням определяется текущее положение, чтобы открыть нужные менюхи. Также параметр $root, который отвечает за тоже что и элемент массива с индексом 11, но у "одинадцати" приоритет выше.

Я особо не наводил красоту, думаю разберешься.
Тут посмотреть, тут исходник.

Спустя 18 минут, 47 секунд (26.02.2009 - 07:44) vitaver написал(а):
kirik
Да в принципе понятно, спасибо!!!
только вот еще вопрос, что означает эта строка:

$ar0 = explode("^", trim($fr[$i-1]));

именно в -1 вопрос? как он счет ведет? подскажешь?

Спустя 29 минут, 42 секунды (26.02.2009 - 08:13) kirik написал(а):
Цитата (vitaver @ 25.02.2009 - 23:44)
именно в -1 вопрос? как он счет ведет? подскажешь?

Подскажу ровно так же как и twin smile.gif При первом проходе у тебя $i = 0, а тут trim($fr[$i-1]) производится вычитание из нуля. А так как -1 строки в файле не существует, скрипт выводит ошибку.
Ошибку можно пофиксить так:
PHP
$ar0 = ($i 0) ? explode("^"trim($fr[$i-1])) : 0;

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.