Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Поиск значения переменной (https://javascript.ru/forum/server/70574-poisk-znacheniya-peremennojj.html)

Sonya 16.09.2017 10:22

Поиск значения переменной
 
Здравствуйте! Помогите, пожалуйста, есть кусок PHP-кода:
$userID = $userInfo['uid'];
		$file = file("test.txt");
		if(in_array($userID,$file)){
		    echo "Есть запись!<br />";
			echo $userID . "<br />";
            print_r($file); 			
		}else{
			echo "Нет записи!<br />";
			echo $userID . "<br />";
			print_r($file);
		}

В файле test.txt записываются в столбик именно значение $userID методом $_POST, но потом при поиске его вышеуказанным кодом, он не находится.
Причем в массиве он выводится print_r($file), также показывается через echo $userID. Например, $userID = 12345,
запись в файле соответственно 12345, echo $userID - выводит 12345, print_r($file) - выводит Array ( [0] => 12345 ).
Т.е. все к тому чтобы запись была найдена, но запись такой код не находит. Причем, если указать значение явно
if(in_array('12345',$file)){
		    echo "Есть запись!<br />";
			echo $userID . "<br />";
            print_r($file); 			
		}else{
			echo "Нет записи!<br />";
			echo $userID . "<br />";
			print_r($file);
		}

то запись находится, но через переменную никак. В чем может быть причина?

Nexus 16.09.2017 11:40

Sonya, пробелов у вас в userID нет?
<?php
    $haystack=array('12345','23456','34567','45678');
    $needle='12345 ';
    var_dump(in_array($needle,$haystack));//false
    var_dump(in_array(trim($needle),$haystack));//true

Sonya 16.09.2017 11:57

Нет, использовала даже trim на всякий случай.

Sonya 16.09.2017 12:05

Выводит:
Нет записи!
12345
Array ( [0] => 12345 )
В файле test.txt:
12345

Если указываю значение явно:
$userID = 12345;
работает.
Все к тому, что значение $userInfo['uid'] - показывает что-то, что не равно 12345, но ведь и в массиве и через echo показывает 12345.

Nexus 16.09.2017 12:17

Sonya, в файле в конце или начале строк пробелов нет?
<?php
    $haystack=array('12345 ','23456','34567','45678');
    $needle='12345';
    $result=false;
    foreach($haystack as $val){
        if(trim($val)==$needle){
            $result=true;
            break;
        }
    };
    var_dump($result);

Sonya 16.09.2017 12:37

Пробелов нет, но при записи используется перевод строки . PHP_EOL, но с этим переводом работает другой скрипт и там все нормально, другое дело, что значение переменной $userInfo['uid'], они чуть по разному получают.

Sonya 16.09.2017 12:44

Да это из-за . PHP_EOL, без записи без него все работает, но как мне записывать в столбик значения, чтобы, каждый раз записывалось с новой строки? Или писать первое значение, а добавлять ставя PHP_EOL перед $userID - PHP_EOL . $userID?

laimas 16.09.2017 12:53

Sonya,
file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)

Sonya 16.09.2017 13:00

Вчера так пробовала, но не получилось, сейчас попробую, может, что не так делала.

Sonya 16.09.2017 13:23

Спасибо работает!!! Что характерно вчера это пробовала (по мануалу), но это не работало, правда в процессе до этого код изменялся (сам код большой), а сегодня начала с исходного, возможно (да нет, наверняка), в процессе трансформации, была уже другая ошибка и та другая не давала корректное исполнение. Ещё раз большое спасибо! Плюс поставить ни Вам (в 101 раз), ни Nexus не получается, alert сообщает, что надо поставить ещё кому-то, ранее заходила в другие темы, читала и ставила плюс, причем темы напрямую меня не интересовали (для общего развития, но главное, чтобы можно + поставить), почему не ставится после этого не пойму, я же ставила уже ещё кому-то. Вообщем огромное спасибо !!!


Часовой пояс GMT +3, время: 04:56.