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
|