Hola, durante la tarde del día de hoy se me presentó una situación que hasta el momento no pude resolver.
Realizo la siguiente consulta a una base de datos MySQL:
Y me devuelve los siguientes datos:
Código MySQL:
Ver original+------------+---------------------------------+----------------------------+--------------+
| object_sid
| value | id
| complex_enum
| +------------+---------------------------------+----------------------------+--------------+
| 559 | Juan Socotroco | referencia_comp:nombre_ref | 1 |
| 573 | Rararara | referencia_comp:nombre_ref | 1 |
| 573 | SASASAS | referencia_comp:nombre_ref | 2 |
| 561 | Roberto Sanchez | referencia_comp:nombre_ref | 1 |
| 562 | | referencia_comp:nombre_ref | 1 |
| 557 | | referencia_comp:nombre_ref | 1 |
| 574 | | referencia_comp:nombre_ref | 1 |
| 541 | | referencia_comp:nombre_ref | 1 |
| 545 | | referencia_comp:nombre_ref | 1 |
| 562 | | referencia_comp:ref_email | 1 |
| 561 | roberto.sanchez@coca-cola.com | referencia_comp:ref_email | 1 |
| 557 | | referencia_comp:ref_email | 1 |
| 574 | | referencia_comp:ref_email | 1 |
| 541 | | referencia_comp:ref_email | 1 |
| 545 | | referencia_comp:ref_email | 1 |
+------------+---------------------------------+----------------------------+--------------+
Lo que yo necesito hacer es a partir de esos datos sabiendo que los datos reales comparten
object_sid y
complex_enum es armar un array que contenga el nombre y el e-mail de la persona.
Lo que hice hasta el momento es separar los datos devueltos por la base de datos en 2 arrays distintos: uno para los nombres y el otro para los e-mail:
Código PHP:
Ver originalforeach ($this->userData as $k)
{
if ($k['id'] == 'referencia_comp:nombre_ref')
{
$arrayNombre[] = array('id' => $k['object_sid'], 'complex' => $k['complex_enum'], 'nombre' => $k['value']); }
else
{
$arrayMails[] = array('id' => $k['object_sid'], 'complex' => $k['complex_enum'], 'email' => $k['value']); }
}
Después de eso los unifiqué en un array nuevo y lo ordené por
id:
Código PHP:
Ver originalusort($arrayAux, array('Excel', 'orderArrayByID'));
private function orderArrayByID($a, $b)
{
return ($a['id'] == $b['id']) ? 0 : $a['id'] > $b['id'] ? 1 : -1;
}
Se me había ocurrido recorrer el array con un
for pero al entrar en el segundo es como que devuelve mal los resultados:
Código PHP:
Ver originalfor ($i = 0; $i < count($arrayAux) - 1; $i++) {
for ($j = 1; $j < count($arrayAux); $j++) {
if ($arrayAux[$i]['id'] == $arrayAux[$j]['id'] && $arrayAux[$i]['complex'] == $arrayAux[$j]['complex'])
{
$finalArray[] = isset($array[$i]['nombre']) ?
array('nombre' => $arrayAux[$i]['nombre'], 'email' => $arrayAux[$j]['email']) : array('nombre' => $arrayAux[$j]['nombre'], 'email' => $arrayAux[$i]['email']); }
}
}
Limpio los valores que no estan completos y re-indexo el array:
Y me queda:
Código PHP:
Ver original(
(
[nombre] => Juan Socotroco
[email] => juancito.socotroco@testmail.com
)
(
[nombre] => Roberto Sanchez
[email] => roberto.sanchez@coca-cola.com
)
(
[nombre] => SASASAS
[email] => sadsad@sasa.com
)
(
[nombre] => Rararara
[email] => juancito.socotroco@testmail.com
)
)
Según lo devuelto por el array los valores de 0, 1 y 2 tienen los datos correctos, pero el número 3 ya no.
Estuve varias horas tratando de resolver esta situación pero no pude llegar a nada concreto. Espero que alguien me pueda iluminar el camino jaja.
Desde ya, gracias.