php рандом из массива работает не совсем рандом)

flash12320
На сайте с 29.02.2016
Offline
74
163
function cikl(){
$data = file("random.txt");
$c=5;
$out = rand(1, count($data) - $c);
$sad=$out+$c;
for($i = $out; $i < $sad; $i++) { echo do_shortcode ( $data[$i]); }
}
cikl();

Подскажите пожалуйста, код который сверху, отбирает случайные 5 строк из файла и выводит их через функцию шорт-кодов. Но проблема в том, что данные выводятся не "рандом", а построчно сверху вниз. Т.е:

1,2,3,4,5

3,4,5,6,7

20,21,22,23,24


Можно ли это исправить, или нужен другой принцип отбора данных из массива?

W1
На сайте с 22.01.2021
Offline
305
#1
flash12320 :
отбирает случайные 5 строк из файла

Не случайные 5 строк, а случайный фрагмент из последовательных 5 строк.

flash12320 :
данные выводятся не "рандом", а построчно сверху вниз

Это разные сущности. Типа "кошки попадаются не пушистые, а серые".

Мой форум - https://webinfo.guru –Там я всегда на связи
br.almighty
На сайте с 13.07.2021
Offline
61
#2

flash12320 :

for($i = $out; $i < $sad; $i++) { echo do_shortcode ( $data[$i]); }

Вы не выводите сразу. Сначала в массив отправьте эти значения, а потом этот массив перемешайте.

Или вам надо вообще в принципе из файла разные значения взять? Если так, то можно просто перемешать весь массив и вывести столько значений, сколько надо последовательно.

Вячеслав Скоблей
На сайте с 31.07.2012
Offline
96
#3

GPT такие вопросы задавайте уже!

function getRandomLines($data, $c) {

    $totalLines = count($data);
    if ($c >= $totalLines) {
        // Если указанное количество строк ($c) больше или равно общему количеству строк ($totalLines),
        // выводим все строки из массива $data.
        foreach ($data as $line) {
            echo $line;
        }
    } else {
        $randomIndexes = array_rand($data, $c);
        foreach ($randomIndexes as $index) {
            echo $data[$index];
        }
    }
}

$data = file("random.txt");
$c = 5;
getRandomLines($data, $c);
Инструменты для WEB и SEO ( https://tools.100zona.com/?utm_source=searchengines.guru ) в одном месте
flash12320
На сайте с 29.02.2016
Offline
74
#4
Всем спасибо за ответы!
LEOnidUKG
На сайте с 25.11.2006
Offline
1745
#5

А можно свои 5 копеек? Без GPT и его говно кода. Особенно прикольно, что если недостаточно строк, то мы будем выводить по порядку, просто текст. Чего?!


<?php
function cikl($file,$cnt=5){
	
	if (file_exists($file))
	{
		$data = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

			if ($data && $cnt)
			{
				$i=0;
				shuffle($data);
				
				$data_count=count($data);
				
				if ($cnt>$data_count)
				{
					$cnt=$data_count;
				}
				
				while($i!=$cnt) 
				{ 
					echo do_shortcode ( $data[$i]); 
					$i++;
				}
			}
	}
}

cikl('diff1.txt',10);
✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий