Кто может подсказать как организовать поиск по массиву аналогичный поиску в базе данных?
есть массив (свойств может быть не ограниченное количество)
$temp_variants[] = array('Цвет'=>'Красный', 'Размер'=>'M', 'Крой'=>'Мужская', 'Код цвета'=>'CC0000');
$temp_variants[] = array('Цвет'=>'Синий', 'Размер'=>'S', 'Крой'=>'Женская', 'Код цвета'=>'0099FF');
$temp_variants[] = array('Цвет'=>'Черный', 'Размер'=>'L', 'Крой'=>'Мужская', 'Код цвета'=>'000000');
$temp_variants[] = array('Цвет'=>'Черный', 'Размер'=>'S', 'Крой'=>'Мужская', 'Код цвета'=>'000000');
получаем список свойств и массив - свойство => опции
$temp_options = array();
$i=1;
foreach($temp_variants as $variant_id => $temp_features)
{
foreach($temp_features as $temp_feature => $temp_value)
{
$temp_options[$temp_feature][$temp_value] = $temp_value;
}
foreach($temp_features as $t_feature => $t_value)
{
$all_options[$i] = new stdClass;
$all_options[$i]->variant_id = $variant_id+1;
$all_options[$i]->feature = $t_feature;
$all_options[$i]->value = $t_value;
++$i;
}
}
список свойств
Array
(
[1] => stdClass Object
(
[variant_id] => 1
[feature] => Цвет
[value] => Красный
)
[2] => stdClass Object
(
[variant_id] => 1
[feature] => Размер
[value] => M
)
[3] => stdClass Object
(
[variant_id] => 1
[feature] => Крой
[value] => Мужская
)
[4] => stdClass Object
(
[variant_id] => 1
[feature] => Код цвета
[value] => CC0000
)
....
свойство => опции
Array
(
[Цвет] => Array
(
[Красный] => Красный
[Синий] => Синий
[Черный] => Черный
)
[Размер] => Array
(
[M] => M
[S] => S
[L] => L
)
[Крой] => Array
(
[Мужская] => Мужская
[Женская] => Женская
)
[Код цвета] => Array
(
[CC0000] => CC0000
[0099FF] => 0099FF
[000000] => 000000
)
)
таблица вариантов - id, name
таблица свойств - variant_id, feature, value
Вот рабочий пример поиска свойств в базе данных
if(isset($selected))
foreach($selected as $_feature=>$_values)
{
$features_filter .= $this->db->placehold('AND (f.feature=? OR f.variant_id in (SELECT variant_id FROM __variants_features WHERE feature=? AND value in(?@))) ', $_feature, $_feature, (array)$_values);
}
$query = $this->db->placehold("SELECT f.feature, f.value, count(v.id) as count
FROM __variants_features f
LEFT JOIN __variants v ON v.id=f.variant_id $features_filter
WHERE 1 GROUP BY f.feature, f.value");
$this->db->query($query);
$variants_features = $this->db->results();
$isset_options = array();
foreach($variants_features as $vf)
{
$isset_options[$vf->feature][$vf->value]->value = $vf->value;
$isset_options[$vf->feature][$vf->value]->count = $vf->count;
}
Прошу помощи, сам разобраться не могу
задача в том что бы при наличии фильтра , к примеру
$selected['Размер'][] = 'L';
найти доступные опции
с базой все работает как часы, но хочется обойтись без нее, если конечно в итоге быстродействие не пострадает
_____________