|
|
|
| Есть граббер, который вытягивает информацию - get_annons.php
Вытягивает в две разные колонки.
Чтобы меньше было вопросов, привожу код. Эти два файла подключаются к индекс-файлу.
Для того, чтобы отобразить информацию в первой колонке, делаю так:
<?php
//функция-граббер
include("get_annons.php");
//вызов функции, грабим и пишем нужную информацию в файл all_links.txt
$name = "all_links.txt";
if (!file_exists($name) || mktime() - filemtime($name) > 2 * 3600) getAnons($name);
$f = file($name);
//выводим значения в случайном порядке
srand ((float) microtime() * 10000000);
$k = array_rand($f, 4);
$arr = 0;
for($i=0;$i<4;$i++){
print $f[$k[$i]];
//собираю в строку произвольные значения
$arr .= $f[$k[$i]];
}
//пишем строку в файл
$file = "exceptions.txt";
$f = fopen($file,"w");
flock($f, LOCK_EX);
fwrite($f, $arr);
flock($f, LOCK_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($f, LOCK_EX);
fwrite($f, $write_diff);
flock($f, LOCK_UN);
fclose($f);
$f = file("diff.txt");
//shuffle($f);
srand ((float) microtime() * 10000000);
$k = array_rand($f, 4);
$f[$k[0]] . $f[$k[1]] . $f[$k[2]] . $f[$k[3]];
}
?>
|
я здесь все делала через запись в файл. Может, можно как-то по-другому сделать вывод значений, которые не повторяются? | |
|
|
|
|
|
|
|
для: Лена
(26.01.2009 в 23:56)
| | Продолжая вчерашнее - если ссылки источника не повторяемые сами по себе, то зачем тогда сравнения, может быть просто брать половину результата граббера для левой колонки, а вторую половину для правой, и постоянно так выводить в случайном порядке. От версии 4 (с чем-то) srand ((float) microtime() * 10000000); можно не сеять. | |
|
|
|
|
|
|
|
для: 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_chunk, 4);
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_chunk, 4);
for($j = 0;$j<4;$j++)
print "second_chunk" . $second_chunk[$arr[$j]];
?>
|
| |
|
|
|
|
|
|
|
для: Лена
(28.01.2009 в 23:31)
| | А если еще проще?:
<?
$f = file("all_links.txt");
$slice = ceil(count($f)/2);
shuffle($f);
$left = array_slice($f, 0, $slice);
$right = array_slice($f, $slice);
|
А далее забираем 4 первых элемента с каждого массива. | |
|
|
|
|
|
|
|
для: 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, $count, TRUE);
print_r($chunk);
?>
|
| |
|
|
|
|
|
|
|
для: Лена
(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. | |
|
|
|