Solved

Looping in PHP and changing color... (hex codes?)

Posted on 2008-10-11
5
338 Views
Last Modified: 2012-05-05
This might not be possible: I am looping through a data set in PHP, and I want to display a status message to the user. I was hoping to make this message start off really light, and get darker as it nears completion. Preferably a light green to a dark green. So my question is, is there a simple way to do this via css? Could I use a hexcode and adjust the number somehow? I know I could just do a thousand if/else statements, but I would rather not.
0
Comment
Question by:interclubs
5 Comments
 
LVL 27

Expert Comment

by:ddrudik
ID: 22696254
If you are looping through in PHP it would seem that you could just have the desired hex codes in an array and select a different color during each iteration.

$colorarray=array('#F5FF80','#99FF80','#80FFFF');

in your loop, using $i as the iteration var:
$colortouse=$colorarray[$i];

The use $colortouse for your color within your HTML tags.
0
 

Author Comment

by:interclubs
ID: 22696321
That would work, the only issue is I don't know how many items are in the loop, it changes based on the size of the array. It could have 5 elements, or it could have 60.
0
 
LVL 11

Accepted Solution

by:
AlexanderR earned 500 total points
ID: 22696347
Credit goes to
http://www.weberdev.com/get_example-3641.html

If you dont necessarily want to go from lightest to brightest, but stop wherever it stops, then change

$members = count($data);
$interval = round(100/$members);
echo $interval;
for($i=1;$i<=100;$i += $interval){

to simply
for($i=1;$i<=100;$i++)
or whatever other interval you want,

Hope this does it.
<?php

function hexDarker($hex,$factor = 30)

        {

        $new_hex = '';

        

        $base['R'] = hexdec($hex{0}.$hex{1});

        $base['G'] = hexdec($hex{2}.$hex{3});

        $base['B'] = hexdec($hex{4}.$hex{5});

        

        foreach ($base as $k => $v)

                {

                $amount = $v / 100;

                $amount = round($amount * $factor);

                $new_decimal = $v - $amount;

        

                $new_hex_component = dechex($new_decimal);

                if(strlen($new_hex_component) < 2)

                        { $new_hex_component = "0".$new_hex_component; }

                $new_hex .= $new_hex_component;

                }

                

        return $new_hex;        

        }
 

$original = "90EE90";
 

$data = array('1','2','3');

?>  
 

<table>

<tr>

</tr>

<?php

$members = count($data);

$interval = round(100/$members);

echo $interval;

for($i=1;$i<=100;$i += $interval){

$newCol = hexDarker($original, $i);

echo '<td bgcolor="'.$newCol.'">h</td>';

}

?>

</table>

Open in new window

0
 
LVL 44

Expert Comment

by:scrathcyboy
ID: 22696402
If you are coding PHP, it can only deliver to the browser one data set at a time.  Are you trying to send 60 page refreshes to the browser in real time, just to show some progress that the PHP file is going through?

This seems a little ridiculous to me, the PHP file mght take 0.1 seconds to complete 100 iterations, but 100 seconds to send 10 page refreshes to the browser.  So what are you accomplishing? Massive delays in showing some progress that finished on the server code before the first page even refreshed ????
0
 
LVL 27

Expert Comment

by:ddrudik
ID: 22697046
interclubs, you might consider this function to select a certain color from within an array of colors that you define.
<pre>

<?php

$colors=array('#000000','#000020','#000040','#000060','#000080','#0000A0','#0000C0','#0000E0','#0000FF');

function getcolor($pass,$passes){

  global $colors;

  $color=floor(($pass/$passes)*count($colors));

  if($color<0){

    $color=0;

  }

  if($color>count($colors)-1){

    $color=count($colors)-1;

  }

  return $colors[$color];

}

// test record counts...

$record_counts=array(1,4,9,13,24);

for ($i = 0; $i < count($record_counts); $i++) {

  echo "record count: $record_counts[$i]<br>";

  for ($j = 0; $j < $record_counts[$i]; $j++) {

    echo "  pass $j color = ".getcolor($j,$record_counts[$i])."<br>";

  }

  echo "<hr>";

}

?>

Open in new window

0

Featured Post

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

When writing CSS, there are a few simple rules that will make your life easier.    1. Using ‘* {box-sizing:border-box;}’. Using this will wrap all your elements in a nice little compact box-model that will give you the width you want, like so... …
Styling your websites can become very complex. Here I'll show how SASS can help you better organize, maintain and reuse your CSS code.
In this tutorial viewers will learn how to style a decorative dropcap for the first letter in a paragraph using CSS. In CSS, create a new paragraph class by typing "p.fancy": Then, to style only the first letter of the first sentence, include the ps…
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…

757 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now