PHPProgramación

Combinar multiples Arrays en PHP

Tras mucho buscar en foros y no encontrar nada que cumpliera con nuestra necesidad, se procedió a realizar una clase que nos permitiera generar combinaciones de arreglos de sin repetir combinaciones y de forma dinámica, es decir, podemos generar combinaciones a partir de dos arreglos o de N cantidad de arreglos.

Lo primero será crear la clase Combinations con el siguiente código:

class Co {
	
	public $combinations = array(),
		$temp = array();
	
	public function __construct() {} 
	
	public function combinate($arrays, $i = 0) {
		if (count($this->temp) > 0) {
			foreach ($this->temp as $ck => $c) {
				$nc = array();
				foreach ($arrays[$i] as $vk => $v) {
					foreach ($c as $cv) {
						if (is_array($cv)) {
							$nc[] = array_merge($cv, array($v));
						} else {
							$nc[] = array($cv, $v);
						}
					}
				}
				$this->temp[$ck] = $nc;
			}
			
			if ($i == count($arrays) - 1) {
				foreach ($this->temp as $t) {
					$this->combinations = array_merge($this->combinations, $t);
				}
			}
			
		} else {
			foreach ($arrays[$i] as $v) {
				$this->temp[] = array($v);
			}
		}
		$next = $i + 1;
		if (isset($arrays[$next])) {
			$this->combinate($arrays, $next);
		}
	}
}

El método que hace la magia es el combinate() el cual recibe como parámetro obligatorio un arreglo en dónde se contengan los arreglos a combinar y un parámetros $i el cual nos ayuda a identificar en qué iteración se encuentra.

A continuación les comparto un ejemplo de como usarlo:

// Arreglos para generar combinaciones entre sus elementos
$arrays = array(
	array("1", "2", "3", "4"),
	array("a", "b", "c")
);

// Crear combinaciones
$c = new Co();
$c->combinate($arrays);

// Impresión de resultados
echo PHP_EOL . "R: " . count($c->combinations) . PHP_EOL;
foreach ($c->combinations as $arr) {
	echo print_r($arr, 1) . PHP_EOL;
}

Este ejemplo nos dará la siguiente salida:

R: 12
Array
(
    [0] => 1
    [1] => a
)

Array
(
    [0] => 1
    [1] => b
)

Array
(
    [0] => 1
    [1] => c
)

Array
(
    [0] => 2
    [1] => a
)

Array
(
    [0] => 2
    [1] => b
)

Array
(
    [0] => 2
    [1] => c
)

Array
(
    [0] => 3
    [1] => a
)

Array
(
    [0] => 3
    [1] => b
)

Array
(
    [0] => 3
    [1] => c
)

Array
(
    [0] => 4
    [1] => a
)

Array
(
    [0] => 4
    [1] => b
)

Array
(
    [0] => 4
    [1] => c
)

Si lo que requieren es añadir más arreglos para generar combinaciones, basta con agregarlos de la siguiente forma:

$arrays = array(
	array("1", "2", "3", "4"),
	array("a", "b", "c", "d", "e"),
	array("=", "(", ")"),
	array(">", "<", "::"),
);

Cómo pueden ver, la función funciona completamente de forma dinámica, así que úsenla sabiamente para no saturar al servidor.

Publicaciones relacionadas
Hosting y ServidoresProgramación

Crear enlaces de folder en CentOS o Linux

ProgramaciónTecnologíaTips

Cómo convertir imágenes al formato WebP con Android Studio

ProgramaciónTips

Como convertir un archivo de Excel a formato JSON

NativeScriptProgramación

NativeScript: Usando Localize para internacionalizar nuestra aplicación