Ребят, хочу создать список как в проводнике, там с плюсами, нажимаешь на этот плюсик, он открываеться. Вот нашел в нете код, на его примере и хочу сделать, а он выдает мне ошибку Notice: Undefined offset: -1 in(красным выделена) <?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 .............. фаил razdel.txt состоит вот так: 1^Музыка^Хиты^Любэ^Атас 2^Музика^Хиты^ДДТ^Осень ....... 50^Кино^Новинки^Боевики^Стиляги Ну и так далее. Подскажите что означает это строка: $ar0 = explode("^", trim($fr[$i-1])); и почему выдает ошибку, и вообще не могу логику понять данного скрипта, кто мож объяснит? Могу выложить весь фаил
Да да да, это и так понятно. Тока вот зачем эта строка нужна, логику не понимаю скрипта, тот кто его написал чтото ведь хотел от этих действий. Зачем он одно и тоже действие делает 3 раза меняя $i. Здесь показано только первое вложение, есть еще три, там меняется только переменные $ar точнее сказать сравниваются. Я хочу перипесать скрипт но понять его до конца не могу, да и не так давно я знаю язык php, поэтому и надеюсь на вашу помощь.
Ну так ктонибкд мне ответит на мой вопрос кроме 0-1=-1. Знатоки к вам обращаюсь!!!!!!!!! Некж то такой тяжелый вопрос задал?
explode разбивает строку по разделителю http://www.php.ru/manual/function.explode.html trim обрезает пробелы в начале и в конце строки http://www.php.ru/manual/function.trim.html А ошибку он выдает, потому что нет такого элемента в массиве. p.s. на будущее - когда выкладываешь код, форматируй его и подсвечивай p.p.s. такие скрипты можно и самому написать.... и лучше так делать. да, ошибаясь. да затрахаясь. но ПОНИМАЯ что и как
Подсвечивать - это на кнопку php нажимать и код между тегами вставлять, да? Я полностью с тобой соглашусь в том, что надо писать самому. Но когда раньше не слышал вообще о таком языке как php и о каких либо других языках очень тяжело улавливать логику выполнения сценариев. Про explode и про trim я знаю. Во многом помогает манул php, но про логику там ни слова. Вот я и учусь, что скачиваю примеры интересующих скриптов и разбираю их по полочкам, так во многом понимаешь использование языка, методов его и резальтата работы. Вот и спрашиваю. Понять хочется зачем так иммено писать код, ведь понятно что это ошибка, я не думаю что его писал человек это не понимающие. Ме хотябы в двух словах, зачем он промисывает это действия: $ar0 = explode("^", trim($fr[$i-1])); $ar = explode("^", trim($fr[$i])); $ar2 = explode("^", trim($fr[$i+1])); Я уже и печатал казжый из массивов, дабы понять зачем? Всеровно на понятно. Происходит смещение на еденицу в верх и в них. Вопрос : ЗАЧЕМ? Зачем он потом сравнивает значение того или иного массива? А делаю все для того, чтобы переписать на свой мотив, под свой проект. В конце концов для того чтоб понимать язык и все приемы с ним связаные!!
И еще вопрос: Что это за знак такой <>? Не больше не меньше - тоесть равенство? Либо не равенство? Описания нигде не встречал именно этого знака.
Знак "не равно". Синоним !=. Может использоваться в mysql, как, впрочем и !=. Попробуй print_r($fr) и посмотри, что выведет - если там вообще элементы в массиве, и как это выглядит.
admyx Элементы в масиве есть, но единственное что они сещаються на еденицу в верх и вниз. Вот именно параметр i-1, i+1 играют в этом роль. Я бы с радостью исправил ошибку если бы понимал зачем такое действие. Результат должен быть как дерево папок, смысл того же проводника на компе. Вот нашел такое меню на javascriptе, схожесть есть но здесь это выполнено на пхп. PHP: <script language="javascript"> function showtree(id){ var menu = 'table' + id; var folder = 'folder' + id; var node = 'node' + id; if(document.all(menu) != null){ if(document.all(menu).style.display == 'none'){ document.all(menu).style.display = ''; document.images[folder].src = 'open.gif'; document.images[node].src = 'node_minus.gif'; } else{ document.all(menu).style.display = 'none'; document.images[folder].src = 'closed.gif'; document.images[node].src = 'node_plus.gif'; } } } </script> <? If ($lst == "") { $lst = "1"; } If ($sort == "") { $sort = "name"; } $fr = file("tx/razdel.txt"); // здесь пичатает заголовок for ($m = 0; $m < count($fr); $m++) { $arb = explode("^", trim($fr[$m])); If ($arb[0] == $rid) { $w = 1; while ($arb[$w] <> "") { $rzd .= "$arb[$w]"; If ($arb[$w+1] <> "") { $rzd .= " >> "; } $w++; } } } ?> <table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td width="100%" bgcolor="#98bac3"><p><b>>> Купить >> <? echo $rzd ?></b></p></td> </tr> </table> <table border="0" width="100%" cellspacing="10" cellpadding="0"> <tr> <td width="10%" valign="top"> <table border="1" width="98%" bgcolor="#FFFFFF" cellpadding="0" align="center" style="border-collapse: collapse" bordercolor="#98bac3" cellspacing="1"> <tr> <td width="100%" valign="top"> <table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td width="100%" bgcolor="#98bac3"><p align="center"><b>разделы</b></p></td> </tr> <tr> <td width="100%" valign="top"> <table border="0" cellspacing="0" cellpadding="0"> <? //здесь он производит поиск товара. В болеро он закоментирован, по тому что берет список товара с оф. сайта. // $d3 = dir("goods/$rid/"); // while($text = $d3->read()) { // If ($text <> "." and $text <> ".." and $text <> ".htaccess") { // $fgo = file("goods/$rid/" . $text); // $asd[] = trim($fgo[2]); // } // } // $d3->close(); // и дальше уже пошло дерево папок раздеров магазина //$tmp = ""; //$tmp2 = ""; //$tmp3 = ""; $pos = 0; for ($i = 0; $i < count($fr); $i++) { $pos2 = $pos+1; $pos3 = $pos2+1; $ifs = false; $ar0 = explode("^", trim($fr[$i-1])); $ar = explode("^", trim($fr[$i])); $ar2 = explode("^", trim($fr[$i+1])); $tovc = 0; for ($t = 0; $t < count($asd); $t++) { If ($asd[$t] == $ar[0]) { $tovc = $tovc + 1; } } If (strtolower($ar[1]) == strtolower($txtrazdel)) { //первое вложение begin If ($ar[2] <> "") { If ($ar[2] <> $tmp) { If ($ar[3] == "") { echo " <tr><td><img src='pixel.gif' width=15 height=15></td> <td nowrap><img src='doc.gif' width=16 height=16 border=0> <a href='buy_$txtlink.php?rid=$ar[0]' class='cap2'>$ar[2] </a> </td></tr> <td></td><td>"; } Else { echo " <tr><td><img id=node$pos src='node_plus.gif' width=15 height=15 onClick=\"showtree($pos)\"></td> <td nowrap><img id=folder$pos src='closed.gif' width=16 height=14> $ar[2] </td></tr> <tr><td></td><td>"; } $tmp = $ar[2]; } Else { If ($ar2[2] <> $ar[2]) { echo "</td></tr>"; } } $ifs = true; } //первое вложение end //второе вложение begin If ($ar[3] <> "") { If ($ar[3] <> $tmp2) { If ($ar0[2] <> $ar[2]) { echo "<table border=0 CELLSPACING=0 CELLPADDING=0 style='display: none' id=table$pos>"; $gr1=$pos; } If ($ar[4] == "") { echo " <tr><td><img src='pixel.gif' width=15 height=15></td> <td nowrap><img src='doc.gif' width=16 height=16 border=0> <a href='buy_$txtlink.php?rid=$ar[0]&ps=$gr1' class='cap2'>$ar[3] </a> </td></tr> <td></td><td>"; } Else { echo " <tr><td><img id=node$pos2 src='node_plus.gif' width=15 height=15 onClick=\"showtree($pos2)\"></td> <td nowrap><img id=folder$pos2 src='closed.gif' width=16 height=14> $ar[3] </td></tr> <tr><td></td><td>"; } $tmp2 = $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] <> $tmp3) { If ($ar0[3] <> $ar[3]) { echo "<table border=0 CELLSPACING=0 CELLPADDING=0 style='display: none' id=table$pos2>\n"; $gr2=$pos2;} If ($ar[5] == "") { echo " <tr><td><img src='pixel.gif' width=15 height=15></td> <td nowrap><img src='doc.gif' width=16 height=16 border=0> <a href='buy_$txtlink.php?rid=$ar[0]&ps=$gr2' class='cap2'>$ar[4] </a> </td></tr> <td></td><td>\n"; } Else { echo " <tr><td><img id=node$pos3 src='node_plus.gif' width=15 height=15 onClick=\"showtree($pos3)\"></td> <td nowrap><img id=folder$pos3 src='closed.gif' width=16 height=14> $ar[4] </td></tr> <tr><td></td><td>"; } $tmp3 = $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; } } } ?> Вот полный код, далее идет поисковик. Код реализован в партнерском магазине болеро и во многих других. Но опять таки выдает ошибку. Мне бы только понять как он работает?
Ошибка возникает на нулевом элементе массива, когда $i - 1 == -1, т.к. минус первого элемента не-ту! В 22-ю строчку вставь PHP: error_reporting(7);