Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/01/2015, 19:40
gerardode80
 
Fecha de Ingreso: enero-2015
Mensajes: 4
Antigüedad: 9 años, 4 meses
Puntos: 0
Pregunta Lista a Matriz.

saludos, la siguiente funcion la obtuve por un post de este foro, que pasa una lista a una matriz de NxM. Es una array, donde las claves de cada nivel corresponden a los patrocinadores y en cada una de esas claves hay un array que contiene a los referidos en el mismo formato.


function listToMatriz($list, $n, $m)
{
// Nota: Esto puede realizarce perfectamente con un LIMIT en la consulta SQL.
if(count($list) > pow($n,$m)) // Si hay mas elementos que los que admite la matriz
$list = array_slice($list, 0, pow($n,$m)); // La trunco.

$levels = []; // Array temporal con los niveles.
$level = 0; // Nivel actual.

while($level <= $m) // Mientras estemos en un nivel valido.
{
$tmp = array_splice($list, 0, pow($n, $level)); // Obtenemos la parte de la lista que corresponde al nivel.
if(count($tmp) > $n) // Si hay mas elementos que los que se admiten.
$tmp = array_chunk($tmp, $n); // Se los parte en grupos.

if($tmp) // Esto es para no generar niveles vacios y ocupar espacio inutilmente, solo se guardan los niveles con datos.
$levels[] = $tmp; // Agregar el nivel.

$level++; // Incrementar el nivel.
}

$level = count($levels)-1; // Empezamos a recorrer el arbol por las hojas del ultimo nivel.

while($level > 2) // Los dos primeros niveles son casos particulares y se resuelven juntos despues.
{
$grupo = 0; // Por que grupo voy.
foreach($levels[$level-1] as &$patrocinadores) // Recorro los patrocinadores del nivel anterior.
{
$tmp = []; // Aca va a ir la información de cada patrocinador.
foreach($patrocinadores as $patrocinador) // A cada patrocinador le asigno los referidos del grupo correspondiente.
{
$tmp[$patrocinador] = (isset($levels[$level][$grupo]) ? [$levels[$level][$grupo] => []] : []);
$grupo++; // Incrementar el grupo.
}
$patrocinadores = $tmp; // Al los patrocinadores lo redefino con sus referidos.
}
unset($levels[$level]); // Esto lo libero ya que no se usa mas.
$level--; // Subo un nivel en el arbol.
}

// Nivel 0 y Nivel 1.
$matriz = []; // Crear matriz vacia.
$matriz[$levels[0][0]] = array_combine($levels[1], $levels[2]); // Resolver ambos niveles de forma particular.

return $matriz; // Retornar la matriz.
}


Sin embargo me regresa el siguiente error:

Warning: array_combine(): Both parameters should have an equal number of elements in C:\....


Alguien puede solucionar este problema y a que se debe?