Link to home
Start Free TrialLog in
Avatar of techbots
techbotsFlag for United States of America

asked on

PHP random quote generator with priority

I am trying to create a script that will randomly pick from a list of quotes and display them on a web page, but will give some of the quotes a higher "weight" based on a priority number. I have pieced together several PHP scripts, but since I don't really know PHP, I have missed something along the way and the script isn't working. Can someone please take a look at this and let me know what I am doing wrong.

Note: after I get this part working, I need to add in the references somehow - can I just add them in at the end of the line with html code wrapped around them to apply the different CSS for them?

Thanks in advance!!
<html>
<head>
</head>
<body>
<p>
<?php
 
$show_quote = 1;
 
$separator = " ";
 
	$quotes[0][quote] = "Quote A";
	$quotes[0][priority] = 1;
	$quotes[1][quote] = "Quote B";
	$quotes[1][priority] = 8;
	$quotes[2][quote] = "Quote C";
	$quotes[2][priority] = 2;
 
if($quotes) {
	for($i = -1; $i < count($quotes); $i++) {
		for($j = 0; $j < $quotes[$i][priority]; $j++) {
			$newquotesindex = count($newquotes) + 1;
			$newquotes[$newquotesindex] = $quotes[$i][quote];
		}
	}
} 
	
if($show_quote >= count($newquotes))
		$show_quote = count($newquotes);
 
$showarray[0] = "";
$showindex = 0;
 
	do {
		$randindex = rand(0, count($newquotes));
		if(!in_array($newquotes[$randindex], $showarray) && $newquotes[$randindex] != "") {
			$showarray[$showindex] = $newquotes[$randindex];
			$showindex++;
		}
	}
	while(count($showarray) <= $show_quote);
 
 
	for($i = 0; $i < $show_quote; $i++ ) {
		if($show_quote == 1 || (($i + 1) == $show_quote))
			echo $showarray[$i]);
		else
			echo $showarray[$i].$separator;
	}
 
}
?>
</p>
</body>
</html>

Open in new window

Avatar of hielo
hielo
Flag of Wallis and Futuna image

the outer for needs to start at 0 not -1
for($i = 0; $i < count($quotes); $i++) {
ASKER CERTIFIED SOLUTION
Avatar of spoxox
spoxox
Flag of Canada image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of techbots

ASKER

Another note: I don't need the script to ever display more than one quote, so that part of the script can be removed - I just don't know what is safe to delete so I left it in there.  It woudl be great if someone wants to simplify this for me!

hielo, I tried just changing that but it didn't do anything. I must still have an error somewhere else.
Brilliant spoxox!!

Exactly what I was looking for - and thank you for such a speedy and SIMPLE answer!

This is what I meant by adding references - my idea worked so I already have the answer to that.

Thank you - now I can sleep tonight!!
<html>
<head>
<style type="text/css">
<!--
.name {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 10px;
	font-style: italic;
	font-weight: bold;
}
-->
</style>
</head>
<body>
<p>
 <?php
 
$quotes[0] = "Quote A<br/><span class=\"name\">- John Doe</span>";
$quotes[1] = "Quote B<br/><span class=\"name\">- Jane Smith</span>";
$quotes[2] = "Quote C<br/><span class=\"name\">- Fred Flintstone</span>";
 
$randindex = rand(1, 100);
 
if ($randindex < 10)
  $quoteIndex = 0;
elseif ($randindex < 25)
  $quoteIndex = 2;
else
  $quoteIndex = 1;
 
echo $quotes[$quoteIndex];
 
?>
 
</p>
</body>
</html>

Open in new window

Happy dreams!
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
routinet -

I like your way of handling priorities better, it's a lot simpler for me to keep track of even though both work.

You both helped tremendously. Thank you all for your swift answers - what would I do without EE?!