За последние 24 часа нас посетили 54684 программиста и 1613 роботов. Сейчас ищут 1342 программиста ...

Как работает функция array_rand() ?

Тема в разделе "PHP для новичков", создана пользователем desertFox, 4 янв 2014.

  1. desertFox

    desertFox Активный пользователь

    С нами с:
    19 окт 2013
    Сообщения:
    62
    Симпатии:
    0
    Здравствуйте.
    Хочу уточнить как работает функция array_rand(). Вот пример. Для вывода ключей в случайном порядке использую array_rand():
    Код (Text):
    1. $tags_key = array_rand($tags, 5);
    2.            
    3.             $i = 0;
    4.             foreach($tags_key as $key)
    5.             {
    6.                 $i++;
    7.                 $link[] = '<a href="/?option=search&s_text=' . trim($tags[$key]) . '" class="link_' . $i . '">' . trim($tags[$key]) . '</a>';
    8.             }
    9.  
    10.             shuffle($link);
    11.  
    12.             foreach($link as $tag)
    13.             {  
    14.                 echo $tag;
    15.             }
    Мне нужно 5 ключей из массива - $tags_key = array_rand($tags, 5); . Что мне не нравится.. Сначала не заметил, всё вроде хорошо и как надо работает, НО после нескольких перезагрузок страницы увидел, что ключей выводится то 5 то 4. Поставил другое число - 4. Теперь чередуется то 4 то 3, т.е. периодически на один ключ показывает меньше чем задано.

    Это особенность array_rand() или я что-то в коде не так написал? Всего элементов в массиве $tags_key - 17, это простые ключевые слова и словосочетания.
     
  2. semnt

    semnt Новичок

    С нами с:
    25 дек 2013
    Сообщения:
    93
    Симпатии:
    0
    Даже не знаю чем Вам помочь.
    Вот такой код пытается найти ситуацию при которой элементов в массиве $link не пять.
    Код (PHP):
    1. $tags = Array( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 );
    2. $n = 0;
    3. do {
    4.     $tags_key = array_rand($tags, 5);
    5.     $i = 0; 
    6.     $link = Array();
    7.     foreach( $tags_key as $key ) {
    8.         $i++;
    9.         $link[] = '[url="/?option=search&s_text='.trim($tags[$key]).'"]'.trim($tags[$key]).'[/url]';
    10.     }
    11.     shuffle($link);
    12.     $n++;
    13. }
    14. while( count( $link ) == 5 and $n < 1000000 );
    15. var_dump( $n );
    Но за миллион проходов не находит такой ситуации.
    А что у Вас выведет такой скрипт? (только осторожно, он подвешивает сервер).
     
  3. desertFox

    desertFox Активный пользователь

    С нами с:
    19 окт 2013
    Сообщения:
    62
    Симпатии:
    0
    Спасибо за код, но мне не код нужен был, а уточнить как функция array_rand() работает, есть ли какие у неё особенности. В общем задачку решил, функция array_rand() тут оказалась не причём. Просто в выборку периодически попадала пустая строка. Откуда эта пустая строка появилась уже разобрался.