On 3/30/2014 6:40 PM, Kevin Burton wrote:
> On Saturday, March 29, 2014 3:49:37 PM UTC-5, Kongthap Thammachat wrote:
>> <?php
>>
>>
>>
>> $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)
>>
>> );
>>
>>
>>
>> $input_animal = 1;
>>
>> $input_color = 2;
>>
>>
>>
>> ?>
>>
>>
>>
>> How to access the $rates array to echo the associated rate of "animal" => 1 and "color" => 2 ? (which is 30), should i re-designed the $rates array?
>>
>>
>>
>> Thanks
>
> I don't think there is a way to reference the array as I understand you want to (at least I don't know of a way). But perhaps the following classes will give you the results that you desire:
>
> class FilterClass {
> private $input;
> private $filter;
> function __construct($filter, $input) {
> $this->filter = $filter;
> $this->input = $input;
> }
> function FilteredArray() {
> return array_filter($this->input, function($val) {
> $matched = false;
> foreach(array_keys($this->filter) as $filter_key) {
> if($val[$filter_key] == $this->filter[$filter_key]) {
> $matched = true;
> } else {
> $matched = false;
> break;
> }
> }
> return $matched;
> });
> }
> };
>
> class ReduceClass {
> private $input;
> private $filter;
> function __construct($filter, $input) {
> $this->filter = $filter;
> $this->input = $input;
> }
> function ReducedArray() {
> return array_reduce($this->input, function($acc, $val) {
> $matched = false;
> foreach(array_keys($this->filter) as $filter_key) {
> if($val[$filter_key] == $this->filter[$filter_key]) {
> $matched = true;
> } else {
> $matched = false;
> break;
> }
> }
> if($matched) {
> array_push($acc, $val);
> }
> return $acc;
> }, array());
> }
> };
>
>
> $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)
> );
> $fc = new FilterClass(array("animal" => 1, "color" => 2), $rates);
> $filtered_array = $fc->FilteredArray();
> var_dump($filtered_array);
>
> Or
>
> $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)
> );
> $fc = new ReduceClass(array("animal" => 1, "color" => 2), $rates);
> $filtered_array = $fc->ReducedArray();
> var_dump($filtered_array);
>
A decent idea, but much harder than it needs to be. A simple two
dimensional array suffices for what he needs. See the other updates in
this thread.
--
==================
Remove the "x" from my email address
Jerry Stuckle
jstucklex(at)attglobal(dot)net
==================
|