Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите разобраться...
 
 автор: sasha12342   (11.03.2014 в 00:46)   письмо автору
 
 

Всем привет!
Не могу понять каким образом в переменную "$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 раз.

  Ответить  
 
 автор: Jovidon   (11.03.2014 в 10:15)   письмо автору
 
   для: 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 - а посмотрите

  Ответить  
 
 автор: sasha12342   (11.03.2014 в 13:34)   письмо автору
 
   для: 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" попадают лишние значения... и куда они деваются после завершения цикла...?

  Ответить  
 
 автор: Jovidon   (11.03.2014 в 13:49)   письмо автору
 
   для: sasha12342   (11.03.2014 в 13:34)
 

У вас в массиве сохряняеться строки а не числа.

$podbor = rand(0, count($masiv) - 1);

$podbor уже число

А что вы хотите делать вообще?

  Ответить  
 
 автор: sasha12342   (11.03.2014 в 16:00)   письмо автору
 
   для: Jovidon   (11.03.2014 в 13:49)
 

Просто вывожу 5 случайных чисел (строк (могут быть просто слова)) из массива.
$podbor уже число

Правильно, это число я использую для выборки случайного элемента из массива: $masiv[$podbor], проверяю есть ли такое слово (элемент) в переменной $five: if (strpos($five, $masiv[$podbor]) !== false) и если элемент присутствует, то ничего не делаем, а если нет, то прибавляем к $five новый элемент: $five .= $masiv[$podbor];
Я не могу понять как в переменную $five попадают лишние значения?! А самое главное, куда они исчезают после выполнения цикла???

  Ответить  
 
 автор: Jovidon   (11.03.2014 в 16:39)   письмо автору
 
   для: 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;

  Ответить  
 
 автор: sasha12342   (11.03.2014 в 17:02)   письмо автору
 
   для: Jovidon   (11.03.2014 в 16:39)
 

Тогда может получиться так: $five = [3][3][5][5][9]. а мне повторы не нужны...
Я не хочу менять принцип выборки из массива, я хочу понять, каким образом в переменную $five попадают данные, которые не должны туда попасть.
Где щель, через которую они туда попадают?

  Ответить  
 
 автор: sasha12342   (12.03.2014 в 11:59)   письмо автору
 
   для: sasha12342   (11.03.2014 в 17:02)
 

Неужели ни у кого нет никаких соображений...?

  Ответить  
 
 автор: confirm   (12.03.2014 в 12:08)   письмо автору
 
   для: sasha12342   (12.03.2014 в 11:59)
 

О чем? Что вы пытаетесь сделать, словами поясните.

  Ответить  
 
 автор: sasha12342   (12.03.2014 в 13:24)   письмо автору
 
   для: 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]
На случайность,как-то вообще непохоже...
Может есть другой способ случайного вывода элементов из массива?

  Ответить  
 
 автор: Jovidon   (12.03.2014 в 13:36)   письмо автору
 
   для: sasha12342   (12.03.2014 в 13:24)
 

<? $result rand(0,rand(2,rand(4,count($masiv)-1)));

  Ответить  
 
 автор: sasha12342   (12.03.2014 в 13:55)   письмо автору
 
   для: Jovidon   (12.03.2014 в 13:36)
 

Числа так-же повторяются, но с большем промежутком между ними...

  Ответить  
 
 автор: confirm   (12.03.2014 в 13:39)   письмо автору
 
   для: sasha12342   (12.03.2014 в 13:24)
 

У вас не числа, а строки, а rand(), это не случайность, а псевдослучайность. С таким же успехом можно обейтись и без rand(), используя shuffle().

  Ответить  
 
 автор: sasha12342   (12.03.2014 в 13:57)   письмо автору
 
   для: confirm   (12.03.2014 в 13:39)
 

А может, каким-то образом привязать timestamp к алгоритму выборки, тогда, я думаю, получится действительно случайный выбор из массива.

  Ответить  
 
 автор: confirm   (12.03.2014 в 14:02)   письмо автору
 
   для: sasha12342   (12.03.2014 в 13:57)
 

Можно получить из цифр 1 и 2 к примеру 126 случайных наборов? А почему нельзя?

Я вас спрашивал, что вы "лепите" и зачем у вас эти квадратики "[]"? Если вам нужна случайность, то вы ее и получаете, ибо то, что в итерациях M и N повторяется значение, это не означает, что это не случайность.

Если вам нужна уникальность, выбрасывайте непонятное для чего [] и сравнивайте цифры, а не строки, получить эти квадратики при выводе можно всегда, и по нужному алгоритму формируйте чего вам надо.

  Ответить  
 
 автор: sasha12342   (12.03.2014 в 14:32)   письмо автору
 
   для: 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 раз, кроме этих значений вы ничего из массива не вытащите. Как вы думайте, это просто случайные совпадения или закономерность?

  Ответить  
 
 автор: confirm   (12.03.2014 в 14:38)   письмо автору
 
   для: sasha12342   (12.03.2014 в 14:32)
 

А что по вашему случайность?

  Ответить  
 
 автор: sasha12342   (12.03.2014 в 14:41)   письмо автору
 
   для: confirm   (12.03.2014 в 14:38)
 

когда результат нельзя предсказать.

  Ответить  
 
 автор: confirm   (12.03.2014 в 14:57)   письмо автору
 
   для: 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);

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования