Начало Новини Маркет Проекти Форум ИТ Работа Уроци Скриптове WiFi точки Още Вход


Нова тема
PHP srand въпрос за елементарен скрипт.
Тази тема е погледната 347 пъти
Добави темата към любими | Принтирай темата | Нова тема 
Публикувано на: 07.10.2011 15:44
devtest
Калфа

Мнения: (14)

Здравейте, Колеги.

Имам следния въпрос към следния скрипт.

CODE
1
2
3
<?php
srand(floor(time() / (60*60*24)));
?>
CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Ime 1
Sila: <?php echo rand(0, 10); ?>
zdr: <?php echo rand(0, 10); ?>
Barzina: <?php echo rand(0, 10); ?>

Ime 2
Sila: <?php echo rand(2, 6); ?>
Zashtita:<?php echo rand(2, 6); ?>
Barzina:<?php echo rand(2, 6); ?>

Ime 3
Sila: <?php echo rand(0, 10); ?>
Zashtita: <?php echo rand(0, 10); ?>
Barzina: <?php echo rand(0, 10); ?>

Става въпрос за следното значи с srand генерирам случайно число за 24 часа и след това с rand го слагам след всяка стойност като числото трябва да е от 0 до 10.

Въпроса ми е как да направя така че да декларирам предварително тези стойности за сила, защита и бързина и след това за различните имена да ги извиквам, но числата за всяко име трябва да е различно.

Сега както съм показал работи както трябва да е, но ми се струва, че не е много правилно на всяка стойност за слагам rand(0, 10).

Искам да декларирам променливите като:

$pow = rand(0,10); // Power between 0 and 10
$def = rand(0,10); // Defence between 0 and 10
$spd = rand(0,10); // Speed between 0 and 10

Не знам след това как да задам така, че на всяко име те да са различни и да ги извиквам с <?php echo $pow; ?> и т.н

Може ли някой да помогне ?


 
---------------------------
Потребител в Mytech.bg от: 07.10.11
напиши eMail напиши лично съобщение виж профила на
темата е прекратена! 
Публикувано на: 07.10.2011 17:35
blooddrainer
Ронин

Модератор

Мнения: (406)

Здравей!

Ето кода
 CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

$imena[0] = rand(0,10);
$imena[1] = rand(2,6);
$imena[2] = rand(0,10);

?>
Ime 1
Sila: <?=$imena[0]?>
zdr: <?=$imena[0]?>
Barzina: <?=$imena[0]?>

Ime 2
Sila: <?=$imena[1]?>
Zashtita: <?=$imena[1]?>
Barzina: <?=$imena[1]?>

Ime 3
Sila: <?=$imena[1]?>
Zashtita: <?=$imena[1]?>
Barzina: <?=$imena[1]?>

Поздрави!


 
---------------------------
Потребител в Mytech.bg от: 11.05.09

http://www.webxmedia.eu
напиши eMail напиши лично съобщение виж профила на
темата е прекратена! 
Публикувано на: 07.10.2011 18:21
devtest
Калфа

Мнения: (14)

Благодаря!

Но нещо не работи, не изкарва никакви числа, а и като няма srand май няма да е за 24 часа.


 
---------------------------
Потребител в Mytech.bg от: 07.10.11
напиши eMail напиши лично съобщение виж профила на
темата е прекратена! 
Публикувано на: 07.10.2011 21:34
Bibi
Ронин

Мнения: (613)

Опитай така:
CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
srand(floor(time() / (60*60*24)));
$data = array(
 
array('Sila' => rand(0, 10), 'Zashtita' => rand(0, 10), 'Barzina' =>echo rand(0, 10)),
 
array('Sila' => rand(2, 6)'Zashtita' => rand(2, 6)'Barzina' =>echo rand(2, 6)),
 
array('Sila' => rand(0, 10), 'Zashtita' => rand(0, 10), 'Barzina' =>echo rand(0, 10))
)
;

// ... ... ...
foreach ($data as $i => $user) {
 
echo 'Ime '. ($i + 1) .'<br />';
 
foreach ($user as $key => $val) {
  
echo $key .': '. $val .'<br />';
 
}
 
echo'<br />';
}
?>



 
Това мнение е редактирано от Bibi на 07.10.2011 21:35
---------------------------
Потребител в Mytech.bg от: 15.01.06
напиши eMail напиши лично съобщение виж профила на
темата е прекратена! 
Публикувано на: 08.10.2011 01:06
devtest
Калфа

Мнения: (14)

Понеже скрипта който предложихте на тръгна.

Стана така:

<?php
$names = array("ivan", "dragan", "petkan", "pesho", "kiro");
$data = array();
srand(floor(time() / (60*60*24)));
foreach($names as $name) {
$data[$name] = array("power" => rand(0, 10), "defense" => rand(0, 10), "speed" => rand(0, 10));
}

foreach($data as $name => $player) {
echo "Player " . $name . " has power " . $player['power'] . ", defense " . $player['defense'] . " and speed . " . $player['speed'] . "<br />";
}
?>


Но имам следния проблем. Понеже съм направил всеки играч на нов таб и трябва да спазя следната структура:

<div id="tabber1" class="player">
<h2>Player #1</h2>
<div class="Skills">
<ul>
<li><label>Sila</label><span><em class="<?php echo rand(0, 10); ?>"></em></span></li>
<li><label>Zashtita</label><span><em class="<?php echo rand(0, 10); ?>"></em></span></li>
<li><label>Barzina</label><span><em class="<?php echo rand(0, 10); ?>"></em></span></li>
</ul>
</div>
</div>

И така за всеки играч поотделно.

Може ли да кажеш в този вид как трябва да използвам скрипта, че да го вкарам както е сега (<?php echo rand(0, 10); ?>) само, че вместо rand да е навсякъде да използвам предварително зададените отгоре променливи.

Може би трябва да ги викам с <?php echo $player['power']; ?> или ?

Как е най-правилно?


 
---------------------------
Потребител в Mytech.bg от: 07.10.11
напиши eMail напиши лично съобщение виж профила на
темата е прекратена! 
Публикувано на: 08.10.2011 09:14
blooddrainer
Ронин

Модератор

Мнения: (406)

Кодът на Bibi би трябвало да бъде това, което ти трябва, само трябваше да се поправи малко, тъй като имаше echo в последните елементи

  CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
   
   
srand(floor(time() / (60*60*24)));
   
$data = array(
       
array('Sila' => rand(0, 10), 'Zashtita' => rand(0, 10), 'Barzina' =>rand(0, 10)),
       
array('Sila' => rand(2, 6)'Zashtita' => rand(2, 6)'Barzina' =>rand(2, 6)),
       
array('Sila' => rand(0, 10), 'Zashtita' => rand(0, 10), 'Barzina' =>rand(0, 10))
    )
;

   
// ... ... ...
   
foreach ($data as $i => $user) {
       
echo 'Ime '. ($i + 1) .'<br />';
       
foreach ($user as $key => $val) {
           
echo $key .': '. $val .'<br />';
       
}
       
echo'<br />';
   
}

?>

Това, което ти си предложил на всички имена задава произволна стойност при еднакъв интервал, което в първият ти вариант не беше така

Поздрави!


 
---------------------------
Потребител в Mytech.bg от: 11.05.09

http://www.webxmedia.eu
напиши eMail напиши лично съобщение виж профила на
темата е прекратена! 
Публикувано на: 08.10.2011 11:53
Bibi
Ронин

Мнения: (613)

 Този отговор е маркиран като удовлетворителен!

Аз не разбирам какъв е проблемът?
CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php $i = 1; foreach ($data as $name => $player) : ?>
<div id="tabber
<?php echo $i; ?>" class="player">
  <h2>Player #
<?php echo $i; ?></h2>
  <div class="Skills">
    <ul>
     
<?php foreach ($player as $key => $val) : ?>
      <li>
        <label>
<?php echo $key; ?></label>
        <span><em class="
<?php echo $val; ?>"></em></span>
      </li>
     
<?php endforeach; ?>
    </ul>
  </div>
</div>
<?php $i++; endforeach; ?>

А примерът на blooddrainer не ти е сработил най-вероятно защото са ти изключени short-tags за php.


 
Това мнение е редактирано от Bibi на 08.10.2011 12:03
---------------------------
Потребител в Mytech.bg от: 15.01.06
напиши eMail напиши лично съобщение виж профила на
темата е прекратена! 
Публикувано на: 08.10.2011 17:16
blooddrainer
Ронин

Модератор

Мнения: (406)

Аз не разбрах много добре каква е идеята на тези неща и кое трябва да е различно, но мисля, че ако правилно сме разбрали, сорс кода е на лице


 
---------------------------
Потребител в Mytech.bg от: 11.05.09

http://www.webxmedia.eu
напиши eMail напиши лично съобщение виж профила на
темата е прекратена! 
Публикувано на: 08.10.2011 18:43
devtest
Калфа

Мнения: (14)

Последно го направих така:

<?php
$names = array("ivan", "dragan", "petkan", "pesho", "kiro");
$data = array();
srand(floor(time() / (60*60*24)));
foreach($names as $name) {
      $data[$name] = array("power" => rand(0, 10), "defense" => rand(0, 10), "speed" => rand(0, 10));
}
echo"<div id="tabber1" class="player">";
foreach($data as $name => $player) {
echo"<h2>$name</h2>
<div class="Skills">
<ul>
<li><label>Sila</label><span><em> $player[power] </em></span></li>
<li><label>Zashtita</label><span><em> $player[defense] </em></span></li>
<li><label>Barzina</label><span><em> $player[speed] </em></span></li>
</ul>
</div>";
}
echo"</div>";
?>

Искам, ако може да го направя в функция и да изчистя кода.

Трябва да е така, че само където ми трябват числата да ги викам. Да се изчисти максимално кода за да се пише HTML кода в echo .. и т.н

Някой може ли да помогне да стане колкото се може по-изчистено ?

Благодаря!


 
Това мнение е редактирано от devtest на 08.10.2011 19:03
---------------------------
Потребител в Mytech.bg от: 07.10.11
напиши eMail напиши лично съобщение виж профила на
темата е прекратена! 
Публикувано на: 09.10.2011 11:20
Bibi
Ронин

Мнения: (613)

Ще се изкуша да се изкажа пак.
Зарежи конкретния код и помисли по-отгоре за нещата.
Като изключим първите редове, където се създава масива с данните, всичко надолу си е чисто view - т.е. то наистина е html и е добре да си остане такова, а не да се прави на функция и да се пише през php с echo.
Така че за мен това е "по-изчистеното": в досегашната си функция създаваш само данните и в края й инклудваш отделно php или phtml файлче, в което само на места имаш echo.

След време, ако ти се наложи да работиш с templates или framework, много добре ще усетиш какво казвам. Но за сега го приеми на доверие.


 
---------------------------
Потребител в Mytech.bg от: 15.01.06
напиши eMail напиши лично съобщение виж профила на
темата е прекратена! 
Публикувано на: 09.10.2011 11:46
devtest
Калфа

Мнения: (14)

@Bibi, благодаря за съвета.

На мен честно казано първия вариант който беше с първоначално деклариране на srand за време и после само където искам да има рандом число за слагам  <?php echo rand(0, 10); ?> ми се вижда най-изчистен.

<?php
srand(floor(time() / (60*60*24)));
?>

Ime 1
Sila: <?php echo rand(0, 10); ?>
zdr: <?php echo rand(0, 10); ?>
Barzina: <?php echo rand(0, 10); ?>

Ime 2
Sila: <?php echo rand(2, 6); ?>
Zashtita:<?php echo rand(2, 6); ?>
Barzina:<?php echo rand(2, 6); ?>

Ime 3
Sila: <?php echo rand(0, 10); ?>
Zashtita: <?php echo rand(0, 10); ?>
Barzina: <?php echo rand(0, 10); ?>

Единствено ме притеснява, че имам 10 играча с по 3 стойности за рандом числа което значи, че трябва да сложа <?php echo rand(0, 10); ?> на 30 места.

Понеже не съм много наясно с PHP-то реших, че така ще натоварва повече сайта.

Реално така ли се получава или спокойно мога да ползвам с rand на повечко места и няма да е проблем? Така ми се вижда и най-изчистено без масив и т.н.

Другия вариант е да сложа кода който последно показах.

Благодаря!


 
---------------------------
Потребител в Mytech.bg от: 07.10.11
напиши eMail напиши лично съобщение виж профила на
темата е прекратена! 
Публикувано на: 09.10.2011 11:54
blooddrainer
Ронин

Модератор

Мнения: (406)

Здравей!

Bibi е права за абсолютно всичко, така че свиквай с отделянето на логиката от шаблоните, тъй като сега имаш 30 пъти echo, но при по-голям проект може да ти се наложи да имаш 30 * 30 пъти echo. Също така разгледай кода, който тя ти предложи, там са използвани цикли, нещото, което прави програмирането и приятно и лесно!

Поздрави!


 
---------------------------
Потребител в Mytech.bg от: 11.05.09

http://www.webxmedia.eu
напиши eMail напиши лично съобщение виж профила на
темата е прекратена! 
Публикувано на: 09.10.2011 11:56
Bibi
Ронин

Мнения: (613)

Добре, но какво ще стане, ако играчите станат 100? Или ако се наложи да ги взимаш от база?

Иначе за php-то няма разлика - натоварването ще е същото при всички описани варианти. rand() пак се вика еднакво много пъти, без значение дали в цикъла или после. Но това няма как да се избегне.


 
Това мнение е редактирано от Bibi на 09.10.2011 12:12
---------------------------
Потребител в Mytech.bg от: 15.01.06
напиши eMail напиши лично съобщение виж профила на
темата е прекратена! 
Публикувано на: 09.10.2011 12:09
devtest
Калфа

Мнения: (14)

Играчите винаги ще са 10 и винаги ще имат 3 стойности.

Да разбирам, че ако си ползвам 30 пати <?php echo rand(0, 10); ?> не е никакъв проблем.

Иначе ми се вижда по-усложнено, а е нещо много просто. Просто един статичен HTML с имена където след всяко име трябва да сложа едно рандом число това е всичко.

Ще ползвам този начин без масив и т.н.

Няма да сбъркам, ако съм ви разбрал правилно. Който и от 2та начина да ползвам ще е еднакво за сайта?


 
---------------------------
Потребител в Mytech.bg от: 07.10.11
напиши eMail напиши лично съобщение виж профила на
темата е прекратена! 
Публикувано на: 09.10.2011 12:10
blooddrainer
Ронин

Модератор

Мнения: (406)

Да, но е по-добре да свикваш с работата с шаблони, тъй като са неизменна част от уеб програмирането.

Поздрави!


 
---------------------------
Потребител в Mytech.bg от: 11.05.09

http://www.webxmedia.eu
напиши eMail напиши лично съобщение виж профила на
темата е прекратена! 
 4 посетители са активни в този форум (0 потребители и 4 гости)  
Активни потребители: ---
   




myTech.bg © 2004 - 2011 | Контакти | За реклама