Как используя, выбор нескольких случайных значений из массива в PHP, вывести ссылки к статьям одной и той же категории?

Доброго времени суток, уважаемые читатели нашего блога! На этом сайте уже был приведен пример того, как создать простой календарь на PHP. Также уже был урок о том, как отладить PHP-код. Еще была рассмотрена тема сортировки массивов. А сегодня мы расскажем о том, как создать скрипт на PHP, который выбирает одно или несколько случайных значений из массива. Итак, приступим.
Мы будем использовать функцию array_rand (array input [, int num_req]), которая извлекает одно или несколько произвольных вхождений из массива. Функция имеет два аргумента: массив input и необязательный аргумент num_req, в котором Вы можете указать сколько случайных значений Вы хотите получить — если не установлено, по умолчанию будет 1.

Предположим, что у нас имеется в базе данных таблица data, в которой находятся статьи и каждой статье определена своя категория. Нам необходимо выбрать все статьи текущей категории и добавить каждую из них в массив, не забывая о её названии. Сделаем это:

<?php

// Выберем статьи из текущей категории
$result = mysql_query("SELECT title,id FROM data WHERE cat=$cat");      
$myrow = mysql_fetch_array($result);

do 
{ // $myrow["id"] - id - статьи, $myrow["title"] - название

    if ($id_score <> $myrow["id"]) 
    { // чтобы не выводилась ссылка	с текущей статьёй
            $subs[$myrow["id"]] = $myrow["title"];
    }
}
while ($myrow = mysql_fetch_array($result));

?>


Чтобы вывести три сылки на статьи в случайном порядке мы, используя функцию array_rand, в цикле будем печатать эти ссылки:

<?php

// А теперь выбираем из полученного массива случайные значения
// и выводим ссылки на наши статьи
$shfl = array_rand($subs, 3);

for ($x=0; $x<count($shfl); $x++) 
{
	$shsubs[] = $subs[$shfl[$x]];
	printf ("<p><a href='articles.php?cat=%s&id=%s'>%s</a></p>
		", $cat, $shfl[$x], $shsubs[$x]);
}

?>

Результатом вывода ссылок будет список со случайными ссылками на ваши статьи.

  1. halk говорит:

    у меня выводит ошибку
    вот ошибка

    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Y:\home\localhost\www\sait\idv.php on line 654

    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Y:\home\localhost\www\sait\idv.php on line 662

    Warning: array_rand() expects parameter 1 to be array, null given in Y:\home\localhost\www\sait\idv.php on line 664
    …………….
    что не так я сделал ?

  2. Softmaker говорит:

    Подключение к базе делаете?
    $mysql_host = "localhost";
    $mysql_database = "your_database";
    $mysql_user = "halk";
    $mysql_password = "12345";

    $db=mysql_connect($mysql_host,$mysql_user,$mysql_password);
    mysql_select_db($mysql_database,$db);

    $result = mysql_query("SELECT title,id FROM data WHERE cat=$cat",$db);

  3. halk говорит:

    да конечно делает ……
    вот как я написал но у меня не работает ,,,// Выберем статьи из текущей категории
    $result = mysql_query("SELECT zag,id FROM object WHERE id_categ=$categ");
    $myrow = mysql_fetch_array($result);
    do
    { // $myrow["id"] — id — статьи, $myrow["title"] — название
    if ($id_score <> $myrow["id"]) // чтобы не выводилась ссылка
    { // с текущей статьёй
    $subs[$myrow["zag"]] = $myrow["id"];
    }
    }
    while ($myrow = mysql_fetch_array($result)); // А теперь выбираем из полученного массива случайные значения
    // и выводим ссылки на наши статьи
    $shfl = array_rand($subs, 3);
    for ($x=0; $x<count($shfl); $x++)
    {
    $shsubs[] = $subs[$shfl[$x]];
    printf ("
    <p><a href=’idv.php?categ=%s&id=%s’>%s</a></p>
    ", $categ , $shfl[$x], $shsubs[$x]);
    }

    ?> в чем причина ?

  4. halk говорит:

    помоги мне . а то я волосы рву но не могу сделать как у тебя

  5. halk говорит:

    вот мой код но он не работае что не так ???????

    // Выберем статьи из текущей категории
    $result = mysql_query("SELECT zag,id FROM object WHERE id_categ=$categ");
    $myrow = mysql_fetch_array($result);
    do
    { // $myrow["id"] — id — статьи, $myrow["title"] — название
    if ($id_score <> $myrow["id"]) // чтобы не выводилась ссылка
    { // с текущей статьёй
    $subs[$myrow["zag"]] = $myrow["id"];
    }
    }
    while ($myrow = mysql_fetch_array($result)); // А теперь выбираем из полученного массива случайные значения
    // и выводим ссылки на наши статьи
    $shfl = array_rand($subs, 3);
    for ($x=0; $x<count($shfl); $x++)
    {
    $shsubs[] = $subs[$shfl[$x]];
    printf ("
    <p><a href=’idv.php?categ=%s&id=%s’>%s</a></p>
    ", $categ , $shfl[$x], $shsubs[$x]);
    }

    ?>

  6. Softmaker говорит:

    Запрос проверяли на работу в phpMyAdmin?

  7. halk говорит:

    НЕТ НЕ ПРОВЕРЯЛ . И ЗАЧЕМ ПРОВЕРЯТ ЕСЛИ САЙТ РАБОТАЕТ?? НО НЕ РАБОТАЕТ ЭТОТ СКРИПТ ИМЕННО

  8. Softmaker говорит:

    Так вот, проверьте ваш запрос: SELECT zag,id FROM object WHERE id_categ=2
    в phpMyAdmin, т.к. ошибка по-видимому связана с тем, что ваш запрос не работает как нужно. Если не сможете найти проблему введите в поисковике: "mysql_fetch_array() expects parameter 1 to be resource, boolean given" и найдёте ответ.