X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Сравнение файлов/массивов
locky-yotu
locky-yotu
Topic Starter сообщение 29.7.2010, 18:39; Ответить: locky-yotu
Сообщение #1


И снова здравствуйте)
Помогите разобраться с функциями сравнения массивов, пожалуйста.
Есть два файла: "test01.txt" и "test02.txt", следующего, к примеру, содержания:
test01:
q
w
e
r
t
y
z
test02:
y
t
r
e
w
q
Пишу вот такую функцию:
[php]<?php
$array01 = file("test01.txt");
$array02 = file("test02.txt");
$result = array_diff ($array01, $array02);
$res_num = count($result);
for($i=0; $i < $res_num; $i++) {echo $result[$i];}
?>[/php]и получается какая-то фигня, вместо положенной, по моему мнению, "z". Где я тут запорол?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 29.7.2010, 18:58; Ответить: alexdrob
Сообщение #2


замените
[PHP]for($i=0; $i < $res_num; $i++) {echo $result[$i];}[/PHP]
на
[PHP]print_r($result);[/PHP]
и я думаю вам всё станет ясно)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
locky-yotu
locky-yotu
Topic Starter сообщение 29.7.2010, 19:06; Ответить: locky-yotu
Сообщение #3


Говорит
Array (     [5] => y      [6] => z )
Что-то пока не ясно. Оно вывело последние элементы массивов, да? То есть весь массив в $result не попадает? Или нет... Я просто не понимаю, что попало в $result... ТО есть по какому принципу?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
сообщение 29.7.2010, 19:09; Ответить: ZhukV
Сообщение #4


Если я верно понял, нужно слить два или более массива в едино целое.
Тогда может пойти в помощь функция array_merge и array_merge_reqursive, хотя если честно, у них есть некоторые баги, что даже очень даже бесит...
В результате:
[PHP]
/*---------------------------------------------------------
Функция рекрусивной замены массивов
Стек главного массива имеет жесткую ссылку
---------------------------------------------------------*/
function arrayMerge($ARRAY, &$HEYSTACK){
$KEY["ARRAY"] = array_keys($ARRAY);
for($i = 0; $i < count($KEY["ARRAY"]); $i++){
$NOW_KEY_ARRAY = $KEY["ARRAY"][$i];
if(is_array($ARRAY[$NOW_KEY_ARRAY])){
arrayMerge($ARRAY[$NOW_KEY_ARRAY], $HEYSTACK[$NOW_KEY_ARRAY]);
}else/*if(is_string($ARRAY[$NOW_KEY_ARRAY]) || is_integer($ARRAY[$NOW_KEY_ARRAY]))*/{
$HEYSTACK[$NOW_KEY_ARRAY] = $ARRAY[$NOW_KEY_ARRAY];
}
}
}
[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
сообщение 29.7.2010, 19:14; Ответить: ZhukV
Сообщение #5


Если уж нужно сравнить файлы на идентичность текстов или другого наполнения, тогда наверное md5 и может serialize (мое мнение), поскольку сравнения очень огромных строк теряет ОЧЕНЬ МНОГО РЕСУРСОВ, не заикаясь уж о веремни.
[PHP]
$f1 = '1.txt';
$f2 = '2.txt';

$hex1 = md5(file_get_contents($f1));
$hex2 = md5(file_get_contents($f2));
if($hex1 == $hex2){ $IDENTY = true; }
else{ $IDENTY = false; }
[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 29.7.2010, 19:16; Ответить: alexdrob
Сообщение #6


в ресульт попадает то что есть в первом массиве и нет во втором, то есть z но с индексом с первого массива то есть 6
[5] => y скорей всего у вас после одного y стоит перенос строки а после второго не стоит вот y и попал
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
locky-yotu
locky-yotu
Topic Starter сообщение 29.7.2010, 19:18; Ответить: locky-yotu
Сообщение #7


ZhukV, нет, я хочу просто получить строки из первого файла, не содержащиеся во втором. Как это делает функция array_diff. Только почему она работает не так, как написано, я не понимаю.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
locky-yotu
locky-yotu
Topic Starter сообщение 29.7.2010, 19:20; Ответить: locky-yotu
Сообщение #8


alexdrob, точно, про перенос я и не подумал)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
locky-yotu
locky-yotu
Topic Starter сообщение 29.7.2010, 19:22; Ответить: locky-yotu
Сообщение #9


Ну а почему вот такой цикл-то ничего не выводит?..
[php]<?php
$array01 = file('test01.txt');
$array02 = file('test02.txt');
$result = array_diff ($array01, $array02);
for ($i=0;$i<count($result);$i++) {
echo $result[$i];
}
?>[/php]Хотя [php]print_r($result);[/php]
выдает [6] => z
, и если ставить ограничение для $i не count($result), а 7 - то все выводится. Т.е. не понятно, почему индексом для "z" выводится 6, а не 0...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 29.7.2010, 19:30; Ответить: alexdrob
Сообщение #10


цикл
$i=0;$i<count($result)
что сделает?
i=0 пока меньше 1го i++
result[0] = не существует
у вас индекс 6

[PHP]<?php
$array01 = file('test01.txt');
$array02 = file('test02.txt');
$result = array_diff ($array01, $array02);
foreach ($result as $k => $v) {
echo $v;
}
?>[/PHP]


(locky-yotun @ 29.7.2010, 22:22) *
Т.е. не понятно, почему индексом для "z" выводится 6, а не 0

то что у вас в первом файле z под индексом 6
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) FinFile - новые возможности для монетизации Ваших файлов!
3 FileXmaster 2077 25.7.2020, 16:10
автор: -Condis-
Открытая тема (нет новых ответов) ExchangeRates.Pro: сравнение цен Bitcoin/Crypto обменников, бирж, P2P рынка 🚀
Поможем найти лучшие цены на обмен 34 криптовалют в 255 странах
8 ExchangeRatesPro 3126 12.2.2020, 18:46
автор: ExchangeRatesPro
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыСравнение 2-х страниц на одну тему
1 rad_mw 1056 28.6.2018, 18:27
автор: Napoleon-007
Открытая тема (нет новых ответов) Добавление файлов
0 PHP_Programist 2569 25.4.2018, 12:25
автор: PHP_Programist
Открытая тема (нет новых ответов) Добавление файлов на сайт
1 Dess33 2799 8.4.2018, 2:32
автор: rasul


 



RSS Текстовая версия Сейчас: 19.4.2024, 21:16
Дизайн