|
|
|
| Всем привет!
Не могу понять каким образом в переменную "$five" попадают лишние цифры...
for($i = 0; $i < 5; $i++){
$masiv = array('[1]','[2]','[3]','[4]','[5]','[6]','[7]','[8]','[9]','[10]');
$five = "";
for($i2 = 0; $i2 < 5;)
{
$podbor = rand(0, count($masiv) - 1);
if (strpos($five, $masiv[$podbor]) !== false) {$i2=$i2;}
else
{$five .= $masiv[$podbor]; $i2++;}
}
echo $five;
}
echo $five;
|
Не могу понять, почему в цикле переменная five содержит до 50 значений, а за циклом показывает 5 разных значений. Причем strpos срабатывает не больше 5 раз. | |
|
|
|
|
|
|
|
для: sasha12342
(11.03.2014 в 00:46)
| |
// 5 раз создали массив $masiv
for($i = 0; $i < 5; $i++){
$masiv = array('[1]','[2]','[3]','[4]','[5]','[6]','[7]','[8]','[9]','[10]');
.....
}
// дамп $masiv - а посмотрите
|
| |
|
|
|
|
|
|
|
для: Jovidon
(11.03.2014 в 10:15)
| | Действительно, в цикле было 5 массивов. Поставил массив перед циклом но результат прежний...
в цикле переменная "$five" содержит эти цифры: [10],[6],[5],[3],[8],[8],[10],[2],[4],[3],[8],[6],[10],[2],[7],
а за циклом: [8],[6],[10],[2],[7],
не понятно, каким образом в "$five" попадают лишние значения... и куда они деваются после завершения цикла...? | |
|
|
|
|
|
|
|
для: sasha12342
(11.03.2014 в 13:34)
| | У вас в массиве сохряняеться строки а не числа.
$podbor = rand(0, count($masiv) - 1);
$podbor уже число
А что вы хотите делать вообще? | |
|
|
|
|
|
|
|
для: Jovidon
(11.03.2014 в 13:49)
| | Просто вывожу 5 случайных чисел (строк (могут быть просто слова)) из массива.
Правильно, это число я использую для выборки случайного элемента из массива: $masiv[$podbor], проверяю есть ли такое слово (элемент) в переменной $five: if (strpos($five, $masiv[$podbor]) !== false) и если элемент присутствует, то ничего не делаем, а если нет, то прибавляем к $five новый элемент: $five .= $masiv[$podbor];
Я не могу понять как в переменную $five попадают лишние значения?! А самое главное, куда они исчезают после выполнения цикла??? | |
|
|
|
|
|
|
|
для: sasha12342
(11.03.2014 в 16:00)
| | а если так
<?php
$masiv = array('[1]','[2]','[3]','[4]','[5]','[6]','[7]','[8]','[9]','[10]');
$five = '';
for($i=0; $i<5; $i++)
{
$five .= $masiv[rand(0,count($masiv)-1)];
}
echo $five;
|
| |
|
|
|
|
|
|
|
для: Jovidon
(11.03.2014 в 16:39)
| | Тогда может получиться так: $five = [3][3][5][5][9]. а мне повторы не нужны...
Я не хочу менять принцип выборки из массива, я хочу понять, каким образом в переменную $five попадают данные, которые не должны туда попасть.
Где щель, через которую они туда попадают? | |
|
|
|
|
|
|
|
для: sasha12342
(11.03.2014 в 17:02)
| | Неужели ни у кого нет никаких соображений...? | |
|
|
|
|
|
|
|
для: sasha12342
(12.03.2014 в 11:59)
| | О чем? Что вы пытаетесь сделать, словами поясните. | |
|
|
|
|
|
|
|
для: confirm
(12.03.2014 в 12:08)
| | Пока пытался изложить суть проблемы, сам в ней разобрался :-)
Но сейчас возник другой вопрос:
Вышеприведённом циклом, вывожу из массива 5 случайных (уникальных) чисел. Но "rand" как-то странно их выбирает, я бы сказал, что совсем не случайно...
Вот вывод 9 "случайных" чисел из массива "$masiv":
[1][3][2][9][10]
[7][5][8][10][3]
[7][1][5][9][6]
[1][3][2][9][10]
[7][5][8][10][3]
[7][1][5][9][6]
[1][3][2][9][10]
[7][5][8][10][3]
[7][1][5][9][6]
На случайность,как-то вообще непохоже...
Может есть другой способ случайного вывода элементов из массива? | |
|
|
|
|
|
|
|
для: sasha12342
(12.03.2014 в 13:24)
| |
<? $result = rand(0,rand(2,rand(4,count($masiv)-1)));
|
| |
|
|
|
|
|
|
|
для: Jovidon
(12.03.2014 в 13:36)
| | Числа так-же повторяются, но с большем промежутком между ними... | |
|
|
|
|
|
|
|
для: sasha12342
(12.03.2014 в 13:24)
| | У вас не числа, а строки, а rand(), это не случайность, а псевдослучайность. С таким же успехом можно обейтись и без rand(), используя shuffle(). | |
|
|
|
|
|
|
|
для: confirm
(12.03.2014 в 13:39)
| | А может, каким-то образом привязать timestamp к алгоритму выборки, тогда, я думаю, получится действительно случайный выбор из массива. | |
|
|
|
|
|
|
|
для: sasha12342
(12.03.2014 в 13:57)
| | Можно получить из цифр 1 и 2 к примеру 126 случайных наборов? А почему нельзя?
Я вас спрашивал, что вы "лепите" и зачем у вас эти квадратики "[]"? Если вам нужна случайность, то вы ее и получаете, ибо то, что в итерациях M и N повторяется значение, это не означает, что это не случайность.
Если вам нужна уникальность, выбрасывайте непонятное для чего [] и сравнивайте цифры, а не строки, получить эти квадратики при выводе можно всегда, и по нужному алгоритму формируйте чего вам надо. | |
|
|
|
|
|
|
|
для: confirm
(12.03.2014 в 14:02)
| | А что Вам мои квадратики так не понравились :-) ?
Выше я уже говорил:
Просто вывожу 5 случайных чисел (строк (могут быть просто слова)) из массива.
| Мне нужно просто вывести из массива 5 элементов. Это могут быть числа, буквы, слова, строка, квадратики и т.п.
Если вам нужна случайность, то вы ее и получаете, ибо то, что в итерациях M и N повторяется значение, это не означает, что это не случайность.
| Как Вы думайте, это утверждение верно для вышеуказанного примера:
[1][3][2][9][10]
[7][5][8][10][3]
[7][1][5][9][6]
[1][3][2][9][10]
[7][5][8][10][3]
[7][1][5][9][6]
[1][3][2][9][10]
[7][5][8][10][3]
[7][1][5][9][6]
Можно запускать скрипт хоть 100027 раз, кроме этих значений вы ничего из массива не вытащите. Как вы думайте, это просто случайные совпадения или закономерность? | |
|
|
|
|
|
|
|
для: sasha12342
(12.03.2014 в 14:32)
| | А что по вашему случайность? | |
|
|
|
|
|
|
|
для: confirm
(12.03.2014 в 14:38)
| | когда результат нельзя предсказать. | |
|
|
|
|
|
|
|
для: sasha12342
(12.03.2014 в 14:41)
| | И зачем тогда задаете вопросы? Чего вы еще хотите от rand()?
Если вам не нравится результат, то пишите алгоритм, по условиям которого должен выдаваться результат. Или заглубляйтесь в теорию вероятности.
Все ваше, это тоже самое, что и:
<?
$a = [0,1,2,3,4,5,6,7,8,9];
$m = [];
$part = 5;
$len = 5;
while($part) {
shuffle($a);
$m[] = implode(array_slice($a,0,$len));
$part--;
}
print_r($m);
|
| |
|
|
|