Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Элемент массива == переменная, Как правильно сравнивать? 
:(
    Опции темы
shader
Дата 28.1.2006, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 16.5.2004
Где: kirovogradcity

Репутация: нет
Всего: нет



Есть код вроде этого:
Код

$otdel='Рота охраны';
$is_reg_otdel=file("otdel.dat");
if(in_array($otdel, $is_reg_otdel)){
.....действия.....
}

В файл otdel.dat из формы добавляются строки вида "\n$otdel" (в первой строке нет символа "\n"). Как правильно учитывать "\n" при сравнении? Тоесть куда его прилепить в условии if(in_array($otdel, $is_reg_otdel)) чтоб оно не мешало? В моем коде ошибка. Потому что \n$otdel != $otdel.
PM MAIL WWW   Вверх
Bikutoru
Дата 28.1.2006, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 8
Всего: 22



Добавлять нужно в конец строки. Вот только \n ли это вопрос. Дело в том, что если "база" создавалась в ОС Windows, то разделителем строк являются два символа идущих друг за другом \r\n ("возварт каретки" и "переход на новую строку"), если же в UNIX со товарищи, то там разделителем считается только \n
Соответственно, если файл был создан в Windows, то должно быть
Код

in_array(($otdel . "\r\n"), $is_reg_otdel)

а если в UNIX и ко
Код

in_array(($otdel . "\n"), $is_reg_otdel)

Добавлено @ 17:59
Советую немного переделать код. Например так:
Код

$regOtdels = array ();
foreach (file('data') as $line) {
    $regOtdels[trim($line)] = 'enabled';
}

$otd = "...";
if (isset($regOtdels[$otd])) {
    // some actions
}


Этому коду все равно где создан файл в UNIX или в Windows, при большом числе записей isset($regOtdels[$otd] будет работать быстрее, чем in_array($otd, $regOtdels).


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Ciber SLasH
Дата 28.1.2006, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: 3
Всего: 67



А можно покоцать из всего массива перевод строки и тогда можно будет сравнивать не боясь:
Код

function filter(&$value, $key) {
    $value = trim($value);
}
$is_reg_otdel = file('otdel.dat');
array_walk($is_reg_otdel, 'filter');

PM   Вверх
shader
Дата 28.1.2006, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 16.5.2004
Где: kirovogradcity

Репутация: нет
Всего: нет



Цитата(Bikutoru @ 28.1.2006, 17:54 Найти цитируемый пост)

Добавлять нужно в конец строки. Вот только \n ли это вопрос

Если в конец строки - тогда в файле после последнего переноса появляется пустая строка. Мне кажется нет разницы, все равно это перенос.
А если я именно так и пишу в файл - fwrite($f, "\n");? Или ОС все равно заменяет на свой символ?

Цитата(Bikutoru @ 28.1.2006, 17:54 Найти цитируемый пост)

Советую немного переделать код.

Не пойму что проверяется в: if (isset($regOtdels[$otd])). Можно маленький комментарий?


Цитата(Ciber SLasH @ 28.1.2006, 18:15 Найти цитируемый пост)

А можно покоцать из всего массива перевод строки и тогда можно будет сравнивать не боясь:

Надо будет попробовать. Когдато столкнулся с тем, что trim ни в какую не хотела обрезать перенос строки. С тех пор не доверяю ей smile.
PM MAIL WWW   Вверх
Mal Hack
Дата 28.1.2006, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Лучше вообще trim'ом убивать все эти вещи...
PM ICQ   Вверх
Bikutoru
Дата 29.1.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 8
Всего: 22



Цитата(shader @ 28.1.2006, 19:57 Найти цитируемый пост)

А если я именно так и пишу в файл - fwrite($f, "\n");? Или ОС все равно заменяет на свой символ?

Тогда будет \n, но если ты вдруг захочешь этот файл в текстовом редакторе поредактировать, то никакой гарантии никто не даст, что там будет именно \n.

Цитата(shader @ 28.1.2006, 19:57 Найти цитируемый пост)

Не пойму что проверяется в: if (isset($regOtdels[$otd])). Можно маленький комментарий?

Можно smile Это проверяет, есть ли в ассоциативном массиве $regOtdels элемент с ключом $otd.




--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
shader
Дата 30.1.2006, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 16.5.2004
Где: kirovogradcity

Репутация: нет
Всего: нет



Сделал как написал Ciber SLasH. Так мне понятнее. Все прекрасно работает. Всем спасибо.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0475 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.