Проверка на отсутствие строки

zIP

Новичок
Проверка на отсутствие строки

Есть выражение:

PHP:
foreach($file as $string)
   {
if($dt==rtrim($string)) {
проверяем есть ли такая строка и если есть то выполняем действие. А как сделать обратное - если нет, то выполняем действие?
 

sage

Новичок
Фанат
ты имеешь ввиду
PHP:
if (условие) {
  // Действие1
} else {
  // Действие2
}
При таком раскладе Действие2 будет срабатывать на каждом проходе цикла, если условие ложно. А требуется, как я понял, однократное выполнение в случае ложности. Так что, [m]in_array[/m] =)

-~{}~ 12.04.06 17:11:

+ применение этой функции является более лаконичным решением, нежели прогон цикла
 

zIP

Новичок
Автор оригинала: Фанат
else тебе не подходит?
Если делаю так то почти работает. Т.е. проверяет и если нет то записывает.
PHP:
foreach($file as $string)

if($dt==rtrim($string)) {


return false;

}

else

$file=fopen("data.dat",'a');
fputs($file,$dt."\r\n");
fclose ($file);
Но разве это корректный код?
 

Фанат

oncle terrible
Команда форума
объясни словами, что тебе надо сделать.
поскольку кодом ты объясняешь совершенно непонятно.
я и sage поняли тебя совершенно по-разному

-~{}~ 12.04.06 10:32:

подробно
 

zIP

Новичок
Пытаюсь научиться что-то делать сам, а не использовать готовое. Конечно на конкретных приерах, теория идет туго.

Это функция.
Берем IP сравниваем с тем что есть в базе и если нет, то записываем.

PHP:
$dt=getenv("REMOTE_ADDR");
function getip($dt) {
$file=file("data.dat");
foreach($file as $string)

if($dt==rtrim($string)) {
return false;
}

else

$file=fopen("data.dat",'a');
fputs($file,$dt."\r\n");
fclose ($file);

}


getip($dt);

$file=file("data.dat");
$s = count($file);
echo "$s";
 

McSimm

Новичок
Вот что у вас фактически получилось внутри цикла. Сами, я уверен, разберетесь что исправить.
PHP:
if($dt==rtrim($string))
{
    return false;
}
else
{
    $file=fopen("data.dat",'a');
}
fputs($file,$dt."\r\n");
 

Andreika

"PHP for nubies" reader
Positive
>после else { не пробовал ставить?
а будет заметна разница?
 

zIP

Новичок
Пробовал. Получаеться цикл. Т.е. записывает один тотже IP два раза если в базе 2 строки, если 4 то 4 раза. И так до бесконечности.
 

McSimm

Новичок
Positive
Зачем ? Чтобы внутрь цикла вложить не только многократное открытие файла, но и запись ?

-~{}~ 12.04.06 10:51:

zIP
пройдитесь мысленно по вашему циклу для трех строк и вы сами все поймете. Обещаю :)
 

zIP

Новичок
Автор оригинала: McSimm
Вот что у вас фактически получилось внутри цикла. Сами, я уверен, разберетесь что исправить.
PHP:
if($dt==rtrim($string))
{
    return false;
}
else
{
    $file=fopen("data.dat",'a');
}
fputs($file,$dt."\r\n");
Спасибо. Разобрался с циклом.
PHP:
function getip($dt) {
$file=file("data.dat");
foreach($file as $string)

if($dt==rtrim($string)) {
return false;
}

else 

$file=fopen("data.dat",'a');
{
fputs($file,$dt."\r\n");
fclose ($file);
}
}
Отредактировал. Так?
 

Фанат

oncle terrible
Команда форума
то есть, тебя правильно понял sage
тебе просто надо проверить, что в файле нет такой строки?

да, твой код неправильный.
ты запись делаешь внутри цикла.
а надо её вынести наружу.

кстати, вот это:
$file=file("data.dat");
$s = count($file);
лишнее.
догадаешься - почему? или подсказать?
 

McSimm

Новичок
Спасибо. Разобрался с циклом.
еще хуже стало.

первый совет - всегда пишите { } для всех конструкций циклов и ветвлений, в данном случае для foreach и else.
совет два (еще раз) - пройдитесь мысленно для трех строк мысленного файла. Один раз когдав нем есть искомая строка, другой - когда нет.
 

zIP

Новичок
Предположу что из этой функции, посколько там массив, можно получить количество строк этого массива, но вот как?
 

zIP

Новичок
Все. Я сдаюсь.
Тот код который я привел выше, как не странно, у меня работает. Проверяет- добавляет-не добавляет.

Все изменения вносимые мной абсолютно не работоспособные.

Если для foreach и else использую {} то цикл не закрываеться и продолжает писать.

Если только поставть вместо
return false;

return true;

?
 
Сверху