[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поиск в массиве аналогичный поиску в базе
Страницы: 1, 2
Shurick
Доброго времени суток знатоки!

Кто может подсказать как организовать поиск по массиву аналогичный поиску в базе данных?

есть массив (свойств может быть не ограниченное количество)


$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';


найти доступные опции

с базой все работает как часы, но хочется обойтись без нее, если конечно в итоге быстродействие не пострадает

_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.