FUDforum
Fast Uncompromising Discussions. FUDforum will get your users talking.

Home » Imported messages » comp.lang.php » Need help accessing the key array.
Show: Today's Messages :: Polls :: Message Navigator
Return to the default flat view Create a new topic Submit Reply
Re: Need help accessing the key array. [message #185475 is a reply to message #185471] Wed, 02 April 2014 17:21 Go to previous messageGo to previous message
Denis McMahon is currently offline  Denis McMahon
Messages: 634
Registered: September 2010
Karma:
Senior Member
On Wed, 02 Apr 2014 06:47:02 -0700, Kevin Burton wrote:

> I guess I still don't understand. The input array is:
>
> $rates = array(
> array("animal" => 0, "color" => 0, "rate" => 5),
> array("animal" => 0, "color" => 1, "rate" => 10),
> array("animal" => 0, "color" => 2, "rate" => 15),
> array("animal" => 1, "color" => 0, "rate" => 20),
> array("animal" => 1, "color" => 1, "rate" => 25),
> array("animal" => 1, "color" => 2, "rate" => 30),
> array("animal" => 2, "color" => 0, "rate" => 35),
> array("animal" => 2, "color" => 1, "rate" => 40),
> array("animal" => 2, "color" => 2, "rate" => 45),
> array("animal" => 3, "color" => 0, "rate" => 50),
> array("animal" => 3, "color" => 1, "rate" => 55),
> array("animal" => 3, "color" => 2, "rate" => 60)
> );
>
> If $input_animal is 1 then $rates[1] will be array("animal" => 0,
> "color" => 1, "rate" => 10). If $input_color = 2 then $rates[1][2] will
> be 10. Right?

Let's look at how you extract a rate from rates.

$rates[0]["rate"] = 5
$rates[1]["rate"] = 10
$rates[2]["rate"] = 15
$rates[3]["rate"] = 20
$rates[4]["rate"] = 25

etc

In your current array:

$rates[0]["rate"] = the rate for animal 0 color 0
$rates[1]["rate"] = the rate for animal 0 color 1
$rates[2]["rate"] = the rate for animal 0 color 2
$rates[3]["rate"] = the rate for animal 1 color 0
$rates[4]["rate"] = the rate for animal 1 color 1

So to get the rate for animal number $a, color number $c:

$the_rate = $rates[$a*3+$c]["rate"];

The inclusion of the animal and color elements in the inner arrays is
extra data that isn't needed.

To simplify this even further, we could use exactly the same math to work
out the index if:

$rates = array (5,10,15,20,25,30,35,40,45,50,55,60);

$the_rate = $rates[$a*3+$c];

In other words, your data at present is being accessed as a 1d array, not
as a 2d array. The fact that each element of the 1d array is another 1d
array representing a record, and that you extract the data you want using
the field name key into the inner array doesn't mean you have a 2d method
of look up based on animal and color.

Your lookup method is 1d based on animal and color, because animal and
color combine to make a single key into the outer 1d array.

If you want to use animal ($a) and color ($c) as indexes into a 2d array,
then you do so like this:

$rates = array(
0 => array ( 5, 10, 15 ),
1 => array ( 20, 25, 30 ),
2 => array ( 35, 40, 45 ),
3 => array ( 50, 55, 60 ) );

Now you have two array keys, $a and $c:

$the_rate = $rates[$a][$c];

Actually, going back to the start of the thread, I suspect that the
answer to the initial question may have been:

$the_rate = $rates[ $animal_num * 3 + $color_num ]["rate"];

but, and this is /*_critically_*/ important, this only works if there are
only and exactly three 'color' entries for every animal, and the order of
the elements in the outer array is fixed with three color entries per
animal.

--
Denis McMahon, denismfmcmahon(at)gmail(dot)com
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: Most secure way to reset a password via email link
Next Topic: Strange but true! Working with interfaces in PHP
Goto Forum:
  

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ]

Current Time: Sat Nov 23 16:39:33 GMT 2024

Total time taken to generate the page: 0.17574 seconds