Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > проблемы с массивом


Автор: WhiteSpirit 27.11.2005, 20:42
Есть файл data.ini:
Код

...
[article]
theme=Первый, Второй, Третий, Четвертый
...


есть класс для работы с этим файлом c_ini.php:
Код

...
      var $ini;
      function ini() //Конструктор
      {
            $this->ini=parse_ini_file($_SERVER['DOCUMENT_ROOT']."/data.ini", true) or die ("Ошибка");
      }
...
      function get_theme_article($i)
      {
               $arr=explode(", ", $this->ini['article']['theme']);
               return $arr[$i];
      }
...


Реализация в файле index.php
Код

...
while($arr=$data->get_theme_article($c))
{
    echo "&nbsp;&nbsp;&nbsp;<a href=\"".$data->get_title_adress(1)."? id=0&theme=".++$c."\">".$arr."</a><br>"
}
... 


В итоге показывается ошибка:
Notice: Undefined offset: 4 in ...\class\c_ini.php on line 49
49-я строка (файл c_ini.php):
Код

...
return $arr[$i];
...


Подскажите пожалуйста откуда берется 4-й индекс


Автор: Mal Hack 27.11.2005, 20:52
Цитата(WhiteSpirit @ 27.11.2005, 20:42)
theme=Первый, Второй, Третий, Четвертый

У тебя ошибочный синтаксис файла. Литералы должны быть в ковычках.

http://ru.php.net/parse_ini_file

Цитата
Структура ini-файла похожа на структуру php.ini.

Константы также могут быть обработаны в ini-файле, так что если вы объявите константу в виде значения для ini-файла до вызова parse_ini_file(), она (константа) будет правильно обработана. Таким образом обрабатываются только значения. Например:

Пример 1. Содержимое sample.ini


Код

; Это пример файла настроек
; Комментарии начинаются с ';', как в php.ini

[first_section]
one = 1
five = 5
animal = BIRD

[second_section]
path = /usr/local/bin
URL = "http://www.example.com/~username"

Автор: WhiteSpirit 27.11.2005, 20:58
Попробую щас проверить, но дело в том что все значения строки ini выводятся довольно исправно, а после последнего кажет ошибку
Добавлено @ 21:07
Сделал:
Код

theme="Первый, Второй, Третий, Четвертый"


Ошибка с 4-м индексом осталась

Автор: -=Ustas=- 27.11.2005, 22:16
Сразу скажу, что в твой код не въезжал, а сразу обратил внимание на префиксный инкремент... Может там нужно использовать постфиксный, $c++ ?

Автор: Darhazer 27.11.2005, 22:19
Это из за цикла
Код

while($arr=$data->get_theme_article($c))

Он выполняеться пока get_theme_article не вернет пустой масив, т.е. когда индекс $c не существуеть. Так, как ты написал, нельзя не визвать get_theme_article с несуществуещем индексом (4), но можеш сделать так:

Код

function get_theme_article($i)
      {
               $arr=explode(", ", $this->ini['article']['theme']);
               return ( $i < count($arr) )? $arr[$i] : false;
      }

Автор: WhiteSpirit 27.11.2005, 22:52
-=Ustas=-
Постфиксный не потянет, поскольку увеличение должно пройти до вывода переменной
Добавлено @ 22:53
Darhazer
Спасибо за подробное разъяснение. Проблема решена.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)