Solved

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

Posted on 2008-10-11
5
339 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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Build an array called $myWeek which will hold the array elements Today, Yesterday and then builds up the rest of the week by the name of the day going back 1 week.   (CODE) (CODE) Then you just need to pass your date to the function. If i…
Nothing in an HTTP request can be trusted, including HTTP headers and form data.  A form token is a tool that can be used to guard against request forgeries (CSRF).  This article shows an improved approach to form tokens, making it more difficult to…
In this tutorial viewers will learn how to customize the background color and font color of highlighted text using the ::selection element in CSS Begin by defining the selected text as an element in CSS by typing "::selection": Style the ::selection…
The viewer will learn how to count occurrences of each item in an array.

863 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

25 Experts available now in Live!

Get 1:1 Help Now