Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: граббер, вывод в разные колонки
 
 автор: Лена   (26.01.2009 в 23:56)   письмо автору
 
 

Есть граббер, который вытягивает информацию - get_annons.php
Вытягивает в две разные колонки.
Чтобы меньше было вопросов, привожу код. Эти два файла подключаются к индекс-файлу.
Для того, чтобы отобразить информацию в первой колонке, делаю так:

<?php
//функция-граббер
include("get_annons.php");
//вызов функции, грабим и пишем нужную информацию в файл all_links.txt
$name "all_links.txt";
if (!
file_exists($name) || mktime() - filemtime($name) > 3600getAnons($name);
$f file($name);
//выводим значения в случайном порядке
srand ((float) microtime() * 10000000);
$k array_rand($f4);
$arr 0;
for(
$i=0;$i<4;$i++){
print 
$f[$k[$i]];
//собираю в строку произвольные значения
$arr .= $f[$k[$i]];
}
//пишем строку в файл
$file "exceptions.txt";
$f fopen($file,"w");
    
flock($fLOCK_EX);
    
fwrite($f$arr);
    
flock($fLOCK_UN);
    
fclose($f);
?>


Задача - вывести во вторую колонку те ссылки, которые не были выведены в первой:

<?php
//если существует файл, где записаны выведенные ссылки
if(file_exists("exceptions.txt") && file_exists("all_links.txt")){

    
$exceptions file("exceptions.txt");
    
//разбиваем файл, где все ссылки
    
$all_link file("all_links.txt");
    
$diff array_diff ($all_link$exceptions); 
    
    
$write_diff 0;
    foreach(
$diff as $d)
        
$write_diff .= $d;
    
    
$file "diff.txt";
    
$f fopen($file,"w");
    
flock($fLOCK_EX);
    
fwrite($f$write_diff);
    
flock($fLOCK_UN);
    
fclose($f);
    
    
$f file("diff.txt");
    
//shuffle($f);
    
srand ((float) microtime() * 10000000);
    
$k array_rand($f4);
$f[$k[0]] . $f[$k[1]] . $f[$k[2]] . $f[$k[3]];
}
?>

я здесь все делала через запись в файл. Может, можно как-то по-другому сделать вывод значений, которые не повторяются?

  Ответить  
 
 автор: sim5   (27.01.2009 в 05:47)   письмо автору
 
   для: Лена   (26.01.2009 в 23:56)
 

Продолжая вчерашнее - если ссылки источника не повторяемые сами по себе, то зачем тогда сравнения, может быть просто брать половину результата граббера для левой колонки, а вторую половину для правой, и постоянно так выводить в случайном порядке. От версии 4 (с чем-то) srand ((float) microtime() * 10000000); можно не сеять.

  Ответить  
 
 автор: Лена   (28.01.2009 в 23:31)   письмо автору
 
   для: sim5   (27.01.2009 в 05:47)
 

Сделала. Так проще, чем было.

<?php
$name 
"all_links.txt";
$f file($name);
if(!
count($f)%2
    
$first count($f)/2;
else 
    
$first ceil(count($f)/2);
    
    
$first_chunk = array();
        for(
$i=0;$i<$first;$i++)
            
$first_chunk[] = $f[$i];
        
$arr array_rand($first_chunk4);
        for(
$j 0;$j<4;$j++)
            print 
"first_chunk" $first_chunk[$arr[$j]];
    
$second_chunk = array();
        for(
$i=$first;$i<count($f);$i++)
            
$second_chunk[] = $f[$i];
        
$arr2 array_rand($second_chunk4);
        for(
$j 0;$j<4;$j++)
            print 
"second_chunk" $second_chunk[$arr[$j]];
?>

  Ответить  
 
 автор: sim5   (29.01.2009 в 05:14)   письмо автору
 
   для: Лена   (28.01.2009 в 23:31)
 

А если еще проще?:
<?
$f 
file("all_links.txt");
$slice ceil(count($f)/2);
shuffle($f);
$left array_slice($f0$slice);
$right array_slice($f$slice);

А далее забираем 4 первых элемента с каждого массива.

  Ответить  
 
 автор: Лена   (30.01.2009 в 00:10)   письмо автору
 
   для: sim5   (29.01.2009 в 05:14)
 

Уже другое делала, наткнулась на другую функцию.
Можно взять array_chunk с сохранением индексов. А потом в цикле выводить, как я выводила.
Все равно сложнее, чем у вас :)

<?php
$f 
file("all_links.txt");
$count ceil(count($f)/2); 
shuffle($f); 
$chunk array_chunk($f$countTRUE); 
print_r($chunk);
?>

  Ответить  
 
 автор: sim5   (30.01.2009 в 03:43)   письмо автору
 
   для: Лена   (30.01.2009 в 00:10)
 

Суть никак не поменялась, а картина усложнилась ;-) Дело ведь в том, что вы выводите постоянно по 4 элемента из исходного. Применив array_chunk(), вы добавили лишнего, а взяв срез массива, достаточно далее просто:
print $array_left[0] . "<br>" . $array_left[1] . "<br>" . $array_left[2] . "<br>" . $array_left[3];
Конечно, с условием, что число элементов в иходном массиве всегда не менее 8.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования