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

Прошу помощи! Ни как не могу вьехать - нужно пересечь значения массива, значений может быть неограниченное количество.


[Цвет] => Array(
[
0] => Синий
[1] => Красный
)

[
Размер] => Array(
[
0] => X
[1] => L
)


вывод:

Синий - X
Синий - L
Красный - X
Красный - L

_____________
OleKh
foreach ($arr['Цвет'] as $key=>$value1) {
foreach ($arr['Размер'] as $key=>$value2) {
echo "<pre>".print_r($value1.' - '.$value2, 1)."<pre/>";
}
}


//Синий - X
//Синий - L
//Красный - X
//Красный - L
Shurick
Здорово но масивов может быть больше.

_____________
Valick
Цитата
Здорово но масивов может быть больше.

и что? работать будет точно так же

___
а если цвет и размер - это результат выборки из базы, то ваша логика течет совсем не в том направлении

_____________
Стимулятор ~yoomoney - 41001303250491
Shurick
Чет не пойму как это должно работать с неограниченным количеством массивов? В примере изначально указаны циклы с ключами определенных массивов.

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


_____________
Стимулятор ~yoomoney - 41001303250491
Arh
Цитата (Shurick @ 20.03.2013 - 09:13)
Чет не пойму как это должно работать с неограниченным количеством массивов? В примере изначально указаны циклы с ключами определенных массивов.



Опишите логику подробней? Возможно в процессе описания вы сами додумаетесь до решения, как обычно и бывает =)

Нужно соединять пары массивов по порядку?
1 и 2
3 и 4
5 и 6
?

Или соединять по определённым ключам?
Тогда нужно составить еще 1 массив с правилами к примеру:
$arr['1'] = 'цвет - размер';
$arr['2'] = 'рост - вес';

или просто его отсортировать в нужном порядке

или задача совсем другая?

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Guest
Это свойства товара. их может быть неограниченное количество. У каждого свойства так же неограниченное количество значений. Все это дело нужно пересечь в варианты. Массив я собираю с формы в которую пользователь вводит значения или с уже имеющихся значений в базе. Но это не имеет особого значения.
Вот такие вот данные могут попасть в массив:

Вес
- 20
- 40

Цвет
- Синий
- Черный

Размер
- S
- M

-------------------

В итоге мне нужно комбинировать все свойства в возможные варианты:

1.Вариант :: 20 - Синий - S
2.Вариант :: 20 - Синий - M
3.Вариант :: 20 - Черный - S
4.Вариант :: 20 - Черный - M
5.Вариант :: 40 - Синий - S
6.Вариант :: 40 - Синий - M
7.Вариант :: 40 - Черный - S
8.Вариант :: 40 - Черный - M
Shurick
Сорри, не авторизовался, пост выше от меня

_____________
bestxp
Может у тебя не оптимальное решение сделано?
Цикл в цикле. порождает проблеммы с производительностью

Может все твои комбинации оставить на уровне селектов?
выберете размер
выберете цвет
выберете вес
выберете длину пипиське biggrin.gif
Valick
Цитата
Массив я собираю с формы в которую пользователь вводит значения или с уже имеющихся значений в базе. Но это не имеет особого значения.

Шутите? Это имеет настолько огромное значение, что важнее этого в приложении нет ничего.


_____________
Стимулятор ~yoomoney - 41001303250491
Shurick
Блин ребята - ну вот есть опции, допустим товара, я их собираю и записываю в базу - есть таблица характеристик и таблица вариантов. делаю запрос к базе, перебираю варианты опций по соответствующим характеристикам и получаю вышеуказанный массив. Или пользователь(модератор, администратор не имеет значения) редактирует форму этих карактеристик, которую я определенным запросом собираю в такой же массив. В итоге нет разницы откуда я собрал этот массив, мне надо пересеч значения характеристик во все возможные комбинации.

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

_____________
Shurick
Собственно вот:

Массив опций


Array
(
[
0] => Цвет
[1] => Размер
[2] => Материал
)


Массив вариантов опций


Array
(
[
0] => Array
(
[
0] => Черный
[1] => Красный
)

[
1] => Array
(
[
0] => S
[1] => M
)

[
2] => Array
(
[
0] => Кожа
[1] => Кожзам
)

)



Вот функция


function fn_get_options_combinations($options, $variants)
{
$combinations = array();

// Take first option
$variant_number = reset(array_keys($options));
$option_id = $options[$variant_number];

// Remove current option
unset($options[$variant_number]);

// Get combinations for other options
$sub_combinations = !empty($options) ? fn_get_options_combinations($options, $variants) : array();

if (!empty($variants[$variant_number])) {
// run through variants
foreach ($variants[$variant_number] as $variant) {
if (!empty($sub_combinations)) {
// add current variant to each subcombination
foreach ($sub_combinations as $sub_combination) {
$sub_combination[$option_id] = $variant;
$combinations[] = $sub_combination;
}
}
else {
$combinations[] = array($option_id => $variant);
}
}
}
else {
$combinations = $sub_combinations;
}

return $combinations;
}


комбинации на выходе


Array
(
[
0] => Array
(
[
Материал] => Кожа
[Размер] => S
[Цвет] => Черный
)

[
1] => Array
(
[
Материал] => Кожзам
[Размер] => S
[Цвет] => Черный
)

[
2] => Array
(
[
Материал] => Кожа
[Размер] => M
[Цвет] => Черный
)

[
3] => Array
(
[
Материал] => Кожзам
[Размер] => M
[Цвет] => Черный
)

[
4] => Array
(
[
Материал] => Кожа
[Размер] => S
[Цвет] => Красный
)

[
5] => Array
(
[
Материал] => Кожзам
[Размер] => S
[Цвет] => Красный
)

[
6] => Array
(
[
Материал] => Кожа
[Размер] => M
[Цвет] => Красный
)

[
7] => Array
(
[
Материал] => Кожзам
[Размер] => M
[Цвет] => Красный
)

)



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

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

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