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);
|