Ответы пользователя по тегу Массивы
  • Как сделать комбинацию значений из двух массивов?

    // рекурсивно создать варианты для каждого корневого ключа
    function create_variants($arr)
    {
        $items = [];
        foreach ($arr as $key => $value) {
            $vars = [$key];
            if (!is_array($value)) {
                $items[] = implode(';', $vars);
                continue;
            }
    
            $variants = create_variants($value);
            foreach ($variants as $variantValue) {
                $items[] = implode(';', array_merge($vars, [$variantValue]));
            }
        }
    
        return $items;
    }
    
    /**
     * объединить варианты корневых ключей
     * @param $partsCount количество объединяемых в одно вариантов
     */
    function join_variants($items, $partsCount)
    {
        $result = [];
        $joinable = array_chunk($items, ceil(count($items)/$partsCount));
    
        foreach ($joinable as $chunk) {
            foreach ($chunk as $index => $item) {
                if (isset($result[$index])) {
                    $result[$index] .= ';'.$item;
                } else {
                    $result[$index] = $item;
                }
            }
        }
    
        return array_map(function ($v) {
            return $v.';';
        }, $result);
    }
    
    var_dump(join_variants(
        create_variants($features),
        count($features)
    ));
    Ответ написан
    Комментировать