[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Найти уикальную строку из двух массивов
sx000
Есть две базы:
login.txt общая база, содержит в себе строки
aaa1
aaa2
aaa3

login_.txt
aaa1
aaa2

Суть скрипт надо выявить строку aaa3 и вывести ее как
echo "Еще не был: ".$lines_login[$j]."\n";

Вот сам код! не работает он, вернее работает но тока с первой строкой. Большая просьба: не надо предлагать свои варианты решения этой задачи, просто подскажите где в моем годе ошибка.
$lines_login = file('login.txt');
$lines_login_ = file('login_.txt');
$count=count($lines_login);
$count_=count($lines_login_);
$j=0;
$j_=0;
while ($j<$count) {

while ($j_<$count_) {

if ( $lines_login[$j] !== $lines_login_[$j_])
{
echo "Еще не был: ".$lines_login[$j]."\n";
}
else
{
echo "уже был: ".$lines_login[$j]."\n";
}
$j_++;
}
$j++;
}




Спустя 9 минут, 33 секунды (26.04.2011 - 17:30) Ulan написал(а):
потому что $j_ не обнуляется в теле цикла и условие $j_<$count_ будет истинно только для первого прохода

Спустя 6 минут, 56 секунд (26.04.2011 - 17:37) Krevedko написал(а):
$j_=0; напиши перед $j++;

Спустя 3 минуты, 8 секунд (26.04.2011 - 17:40) ИНСИ написал(а):
Цитата
Большая просьба: не надо предлагать свои варианты решения этой задачи, просто подскажите где в моем годе ошибка.

Очень жаль, ведь можно сделать код получше, понятнее и быстрее.

Спустя 7 минут, 43 секунды (26.04.2011 - 17:48) ИНСИ написал(а):
sx000 просто посмотри разницу:
$lines_login = file('login.txt');
$lines_login_ = file('login_.txt');

foreach($lines_login as $data) {
if(!in_array($data,$lines_login_))
echo echo "Еще не был: $data\n";
else
echo "уже был: $data\n";
}

Спустя 1 минута, 21 секунда (26.04.2011 - 17:49) inpost написал(а):
velbox
А ведь ты абсолютно прав, заходя в тему у меня уже было своё решение до того, как подгрузилась страница. А тут совсем другой код...

Спустя 2 минуты, 1 секунда (26.04.2011 - 17:51) sx000 написал(а):
Спасибо мужики, я весь вечер мозги мучал smile.gif
Да я не спорю что можно еще красивее сделать например через арей серч. Просто вы думаете так, а у меня вот пока такое мышление smile.gif, это пятый скрипт мой smile.gif навыков ноль вот и тыкаюсь.

Спустя 35 секунд (26.04.2011 - 17:51) walerus написал(а):
Я чего то не понимаю, а кто то отменял функцию - array_diff()???

Функция array_diff() возвращает массив, состоящий из значений массива массив_1, которые отсутствуют в любом другом массиве, перечисленном в последующих аргументах. Обратите внимание, что ключи массивов сохраняются.

Загрузить файлы в массивы
login.txt - $array1
login_.txt - $array2

$result = array_diff ($array1, $array2);

Че замарачиваться то??

Спустя 44 секунды (26.04.2011 - 17:52) sx000 написал(а):
foreach я вообще не понимаю покамесь ... не ну читал но не принял его еще мозг. smile.gif

Спустя 1 минута, 4 секунды (26.04.2011 - 17:53) sx000 написал(а):
$result = array_diff ($array1, $array2);
красота вообще smile.gif супер просто.

Спустя 3 минуты, 7 секунд (26.04.2011 - 17:56) walerus написал(а):
Цитата (velbox @ 26.04.2011 - 14:48)
sx000 просто посмотри разницу:
$lines_login = file_get_contents('login.txt');
$lines_login_ = file_get_contents('login_.txt');

foreach($lines_login as $data) {
if(!in_array($data,$lines_login_))
  echo echo "Еще не был: $data\n";
else
  echo "уже был: $data\n";   
}



Помому не будет работать, ведь file_get_contents(), прочтет файл как строку, а у тебя потом идет проверка in_array, поиск в массиве... если так, то тогда уже


$lines_login = file_get_contents('login.txt');
$lines_login = explode('\n', $lines_login);

$lines_login_ = file_get_contents('login_.txt');
$lines_login_ = explode('\n', $lines_login_);

foreach($lines_login as $data) {
if(!in_array($data,$lines_login_))
echo echo "Еще не был: $data\n";
else
echo "уже был: $data\n";
}


или я ошибся ?

Спустя 6 минут, 49 секунд (26.04.2011 - 18:03) sx000 написал(а):
$lines_login = file('login.txt');
$lines_login_ = file('login_.txt');
$result = array_diff ($lines_login, $lines_login_);
print_r($result);

к стати выводит пустой массив
просто
Array
(
)

Спустя 2 минуты, 13 секунд (26.04.2011 - 18:05) Krevedko написал(а):
у меня выводит
Array ( [1] => aaa2 [2] => aaa3 )

Спустя 2 минуты, 8 секунд (26.04.2011 - 18:08) sx000 написал(а):
у вас наверное хитрый интерпретатор smile.gif
да все ок спасибо большое

Спустя 6 минут, 50 секунд (26.04.2011 - 18:14) walerus написал(а):
Мб пригодится на будущее...


//загружает файл как массив
function loadAsArray($filename)
{
if (!file_exists($filename))
return array();
$result = explode("\n", file_get_contents($filename));
foreach($result as &$line)
$line = trim($line, " \r\n\t");
$result = array_filter(&$result, create_function('$v', 'return !empty($v);'));
return array_values(&$result);
}


Функция читающая файл как массив, удаляя сразу дубли в файле, на тот случай если есть двойные, тройные.... одинаковые строки, так же игнорирует пустые строки.

вызов $data = loadAsArray('Путь к файлу');

Спустя 36 секунд (26.04.2011 - 18:15) ИНСИ написал(а):
Цитата
ведь file_get_contents(), прочтет файл как строку

Упс, перепутал функции smile.gif А по поводу array_diff взял на заметку. Отлично smile.gif

Спустя 5 минут, 31 секунда (26.04.2011 - 18:20) Krevedko написал(а):
значит явно не твоя работа :D
http://phpforum.ru/index.php?showtopic=44184

//Очищаем столбец сортировки от повторяющихся значений    
$search = array_unique($data);
$doubles = array_diff_key($data , $search);

Спустя 1 минута, 3 секунды (26.04.2011 - 18:22) ИНСИ написал(а):
Цитата
значит явно не твоя работа biggrin.gif
http://phpforum.ru/index.php?showtopic=44184

smile.gif мда... спалился ....

Спустя 1 минута, 1 секунда (26.04.2011 - 18:23) walerus написал(а):
biggrin.gif biggrin.gif biggrin.gif biggrin.gif

Спустя 8 минут, 13 секунд (26.04.2011 - 18:31) sx000 написал(а):
ну помочь же хотел человек !!! а это важно

Спустя 5 минут, 41 секунда (26.04.2011 - 18:36) sx000 написал(а):
а как склеить два массива
$lines_login = file('login.txt');
$lines_login_ = file('login_.txt');
$lines_login_bad = file('bad.txt');
$result = array_diff ($lines_login, $lines_login_);
print_r($result);

Чтоб поискать еще и в $lines_login_bad?

$lines_login_bad и $lines_login_ склеить.

Спустя 1 минута, 56 секунд (26.04.2011 - 18:38) Invis1ble написал(а):
array_merge() ?

Спустя 5 минут, 14 секунд (26.04.2011 - 18:44) sx000 написал(а):
$lines_login = file('login.txt');
$lines_login_ = file('login_.txt');
$lines_login_bad = file('bad.txt');
$lines_login_ = array_merge($lines_login_, $lines_login_bad);
$result = array_diff ($lines_login, $lines_login_);
print_r($result);

ага все отлично получилось, на старый код смотреть смешно даже smile.gif

Спустя 7 минут, 28 секунд (26.04.2011 - 18:51) walerus написал(а):
Жесть )), ну кто так делает ? ))

$result = array_diff ($lines_login, $lines_login_, $lines_login_bad, $array_n);

сравниваем все массивы с первым )))

Спустя 7 минут, 20 секунд (26.04.2011 - 18:58) sx000 написал(а):
blink.gif точно
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.