16.09.2017, 10:22
|
Профессор
|
|
Регистрация: 07.07.2016
Сообщений: 281
|
|
Поиск значения переменной
Здравствуйте! Помогите, пожалуйста, есть кусок 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);
}
то запись находится, но через переменную никак. В чем может быть причина?
Последний раз редактировалось Sonya, 16.09.2017 в 11:08.
Причина: Уточнение
|
|
16.09.2017, 11:40
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,791
|
|
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
|
|
16.09.2017, 11:57
|
Профессор
|
|
Регистрация: 07.07.2016
Сообщений: 281
|
|
Нет, использовала даже trim на всякий случай.
|
|
16.09.2017, 12:05
|
Профессор
|
|
Регистрация: 07.07.2016
Сообщений: 281
|
|
Выводит:
Нет записи!
12345
Array ( [0] => 12345 )
В файле test.txt:
12345
Если указываю значение явно:
$userID = 12345;
работает.
Все к тому, что значение $userInfo['uid'] - показывает что-то, что не равно 12345, но ведь и в массиве и через echo показывает 12345.
|
|
16.09.2017, 12:17
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,791
|
|
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);
|
|
16.09.2017, 12:37
|
Профессор
|
|
Регистрация: 07.07.2016
Сообщений: 281
|
|
Пробелов нет, но при записи используется перевод строки . PHP_EOL, но с этим переводом работает другой скрипт и там все нормально, другое дело, что значение переменной $userInfo['uid'], они чуть по разному получают.
|
|
16.09.2017, 12:44
|
Профессор
|
|
Регистрация: 07.07.2016
Сообщений: 281
|
|
Да это из-за . PHP_EOL, без записи без него все работает, но как мне записывать в столбик значения, чтобы, каждый раз записывалось с новой строки? Или писать первое значение, а добавлять ставя PHP_EOL перед $userID - PHP_EOL . $userID?
Последний раз редактировалось Sonya, 16.09.2017 в 12:45.
Причина: Уточнение
|
|
16.09.2017, 12:53
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Sonya,
file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)
|
|
16.09.2017, 13:00
|
Профессор
|
|
Регистрация: 07.07.2016
Сообщений: 281
|
|
Вчера так пробовала, но не получилось, сейчас попробую, может, что не так делала.
|
|
16.09.2017, 13:23
|
Профессор
|
|
Регистрация: 07.07.2016
Сообщений: 281
|
|
Спасибо работает!!! Что характерно вчера это пробовала (по мануалу), но это не работало, правда в процессе до этого код изменялся (сам код большой), а сегодня начала с исходного, возможно (да нет, наверняка), в процессе трансформации, была уже другая ошибка и та другая не давала корректное исполнение. Ещё раз большое спасибо! Плюс поставить ни Вам (в 101 раз), ни Nexus не получается, alert сообщает, что надо поставить ещё кому-то, ранее заходила в другие темы, читала и ставила плюс, причем темы напрямую меня не интересовали (для общего развития, но главное, чтобы можно + поставить), почему не ставится после этого не пойму, я же ставила уже ещё кому-то. Вообщем огромное спасибо !!!
|
|
|
|