Хорошо, если я получу это прямо сейчас, у вас есть Продукты с четырьмя атрибутами: идентификатор, цвет, размер и длина, которые вы представляете как
[product_id] => array (
1 => [color_id],
2 => [size_id],
3 => [length_id]
)
Лично я считаю эту структуру несколько неуклюжей. Идентификатор продукта должен быть внутри массива, поскольку он является атрибутом продукта. Кроме того, использование индексных номеров вместо имен свойств затрудняет понимание ваших продуктов.
Теперь, что вы хотите сделать, это найти все возможные комбинации одного из атрибутов, например, все size_id и length_id, когда пользователь выбирает color_id, например, для черный.
Вы можете сделать это с помощью метода поиска:
function findCombinationsByColorId($color_id, $products)
{
$combos = array($color_id => array(
'sizes' => array(),
'lengths' => array(),
'products' => array()
));
foreach($products as $productId => $product)
{
if($product[1] === $color_id) {
$combos['sizes'][] = $product[2];
$combos['lengths'][] = $product[3];
$combos['products'][] = $productId;
}
}
return $combos;
}
Теперь, когда вам нужно найти все комбинации для черного и черного с color_id, равным 0, вы должны сделать findCombinationsByColorId(0, $productArray)
, и он вернет массив, содержащий все возможные размеры, длины и идентификаторы продуктов для этого цвета.
Вы бы написали дополнительные функции для получения комбинаций по другим атрибутам. Вы можете сделать метод поиска универсальным, но я оставлю это на ваше усмотрение, чтобы выяснить, как это сделать.
Чего я не понимаю, так это почему вы вообще сортируете это на уровне массива. Я предполагаю, что вы откуда-то получаете возможные продукты, например, база данных. Так почему бы не получить комбо оттуда. Это, вероятно, будет так же просто, как SELECT size_id, length_id, product_id from products where color_id = 0
.