[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Из ассоц массива сформировать масиввы по правилу
belyys
Доброго времени суток, не получается прокрутить одну феньку (

есть асоцц массив он формируется автоматически, может быть других размеров, вот пример:

array(
0 => array(40,41,44)
1 => array(47,48)
2 => array(51,56)
);

Вот что нужно получить (исходя из этого примера):

40,47,51
40,47,56
40,48,51
40,48,56
41,47,51
41,47,56
41,48,51
41,48,56
44,47,51
44,47,56
44,48,51
44,48,56

Запарка, помогите !!!
walerus
belyys Свои мысли предоставь... и я не вижу ассоциативного массива в примере...
wacko.gif
Valick
Цитата
Вот что нужно получить (исходя из этого примера):

надо распечатать или сохранить в таом виде куда-то?


_____________
Стимулятор ~yoomoney - 41001303250491
belyys
array(array(40,41,44), array(47,48), array(51,56));

Проблема в том как перебрать это что бы получилось вот это:

array(
array(40,47,51),
array(40,47,56),
array(40,48,51),
array(40,48,56),
array(41,47,51),
array(41,47,56),
array(41,48,51),
array(41,48,56),
array(44,47,51),
array(44,47,56),
array(44,48,51),
array(44,48,56)
);
Valick
едрён батон.... очередная "уличная магия"
____
опишите закономерность, для получения одного массива из другого
а еще лучше расскажите что это за массив и вообще что вы хотите сделать в целом

_____________
Стимулятор ~yoomoney - 41001303250491
belyys
Хочу перебрать это:

array(array(40,41,44), array(47,48), array(51,56));

так что бы получились все возможные варианты, если три массива то исходный будет тоже из 3-х значений, перебрать не проблемма, просто я не знаю сколько будет подмасивов, а так бы воспользоватся темже for или foreach, но беда.


Valick
еще раз...
что это за массив, какую сущность имеют его значения, каким образом он формируется?
что у вас за приложение в целом?
какую цель вы преследуете получением нужного вам массива?

_____________
Стимулятор ~yoomoney - 41001303250491
belyys
делаю точный фильтр для магазина, этот массив array(array(40,41,44), array(47,48), array(51,56)); мои данные для поиска, есть фильтр и его значения, эти три массива в массиве это фильтры, значения этих фильтров это значение элементов этих массивов.

Сколько фильтров в данном случае их 3 это критерия поиска для товара, из этих фильтров а точнее их значений я хочу сформировать все варианты выборки которые буду сравнивать с значениями фильтра товара.

из этих фильтров: array(array(40,41,44), array(47,48), array(51,56)); я хочу получить все варианты подбора, то есть в данном случае должен получить вот это:

array(
array(40,47,51),
array(40,47,56),
array(40,48,51),
array(40,48,56),
array(41,47,51),
array(41,47,56),
array(41,48,51),
array(41,48,56),
array(44,47,51),
array(44,47,56),
array(44,48,51),
array(44,48,56)
);

и потом я просто прокручу товар и если у мена в товаре совпадет его значения фильтров с хотя бы одним из этих, то этот товар точно подходит.

Решил так потомучто просто SQL запросом дело не решить если в одном фильтре выбраны пару значений, SQL отпадает.


Valick
Цитата
делаю точный фильтр для магазина, этот массив array(array(40,41,44), array(47,48), array(51,56)); мои данные для поиска, есть фильтр и его значения, эти три массива в массиве это фильтры, значения этих фильтров это значение элементов этих массивов.

Сколько фильтров в данном случае их 3 это критерия поиска для товара, из этих фильтров а точнее их значений я хочу сформировать все варианты выборки которые буду сравнивать с значениями фильтра товара.

из этих фильтров: array(array(40,41,44), array(47,48), array(51,56)); я хочу получить все варианты подбора, то есть в данном случае должен получить вот это:

это выше моего понимания
вряд ли я смогу вам помочь
Цитата
Решил так потомучто просто SQL запросом дело не решить

звучит сомнительно


_____________
Стимулятор ~yoomoney - 41001303250491
belyys
Решение если комуто нужно к примеру из array(array(40,41,44), array(47,48), array(51,56)) сделать (перебрать все комбинации):

array(
array(40,47,51),
array(40,47,56),
array(40,48,51),
array(40,48,56),
array(41,47,51),
array(41,47,56),
array(41,48,51),
array(41,48,56),
array(44,47,51),
array(44,47,56),
array(44,48,51),
array(44,48,56)
);

РЕШЕНИЕ:

$filtrMass =array(array(40,41,44), array(47,48), array(51,56));

function fill (&$arr, $idx = 0) {
static $line = array();
static $keys;
static $max;
static $results;
if ($idx == 0) {
$keys = array_keys($arr);
$max = count($arr);
$results = array();
}
if ($idx < $max) {
$values = $arr[$keys[$idx]];
foreach ($values as $value) {
array_push($line, $value);
fill($arr, $idx+1);
array_pop($line);
}
} else {
$results[] = $line;
}
if ($idx == 0) return $results;
}

echo "<pre>";
print_r(fill($filtrMass));
echo "</pre>";

Valick biggrin.gif
Юморной "это выше моего понимания
вряд ли я смогу вам помочь"
tongue.gif
Быстрый ответ:

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