Solved

how to cast a variable in a foreach loop?

Posted on 2008-10-01
4
1,385 Views
Last Modified: 2012-05-05
Hi,
i'm trying to loop through a list of float values and compare them.
turns out i can't use regular type casting in a foreach loop.

i looked around but i couldn't find any way i can actually cast there.
maybe there's a trick?
any help is greatly appreciated.


here's my code:


$zDate = 1.19; // debug.
		$zodiacs = array (
				0.00 => "Sagittarius",
				1.20 => "Capricorn",
				2.19 => "Auarius",
				3.21 => "Pisces",
				4.20 => "Aries",
				5.21 => "Taurus",
				6.21 => "Gemini",
				7.23 => "Cancer",
				8.23 => "Leo",
				9.23 => "Virgo",
			   10.24 => "Libra",
			   11.22 => "Scorpio",
			   12.22 => "Sagittarius",
		);
		
		foreach ($zodiacs as $key =>$value)
//		foreach ($zodiacs as (float)$key =>$value) was my first reaction, but that does not work.
		{
			$fkey = (float)$key;   //even this doesn't work
			if($zDate > $fkey)
			{
//$fkey will always be a rounded value here. e.g. 1, 2, or 3, ect...
				$zodiacName = $value;
				continue;
			}
			
		}

Open in new window

0
Comment
Question by:nOOgz
  • 2
4 Comments
 
LVL 142

Accepted Solution

by:
Guy Hengel [angelIII / a3] earned 250 total points
ID: 22617596
please try this:
    $zodiacs = array (
                        "0.00" => "Sagittarius",
                        "1.20" => "Capricorn",
                        "2.19" => "Auarius",
                        "3.21" => "Pisces",
                        "4.20" => "Aries",
                        "5.21" => "Taurus",
                        "6.21" => "Gemini",
                        "7.23" => "Cancer",
                        "8.23" => "Leo",
                        "9.23" => "Virgo",
                     "10.24" => "Libra",
                     "11.22" => "Scorpio",
                     "12.22" => "Sagittarius",
            );

Open in new window

0
 
LVL 82

Expert Comment

by:hielo
ID: 22617614
you need "string" keys, not floats - then do the cast:
$zDate = 1.19; // debug.
            $zodiacs = array (
                        "0.00" => "Sagittarius",
                        "1.20" => "Capricorn",
                        "2.19" => "Auarius",
                        "3.21" => "Pisces",
                        "4.20" => "Aries",
                        "5.21" => "Taurus",
                        "6.21" => "Gemini",
                        "7.23" => "Cancer",
                        "8.23" => "Leo",
                        "9.23" => "Virgo",
                     "10.24" => "Libra",
                     "11.22" => "Scorpio",
                     "12.22" => "Sagittarius"
            );

Open in new window

0
 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 22617618
the problem is that any numerical value is considered a array index, and not a array key information, hence implicitly casted as int
0
 
LVL 1

Author Closing Comment

by:nOOgz
ID: 31502109
totally. duh .. thank you so much :)
0

Featured Post

Are your AD admin tools letting you down?

Managing Active Directory can get complicated.  Often, the native tools for managing AD are just not up to the task.  The largest Active Directory installations in the world have relied on one tool to manage their day-to-day administration tasks: Hyena. Start your trial today.

Question has a verified solution.

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

Generating table dynamically is the most common issue faced by php developers.... So it seems there is a need of an article that explains the basic concept of generating tables dynamically. It just requires a basic knowledge of html and little maths…
This article discusses four methods for overlaying images in a container on a web page
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.

770 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