Foros del Web » Programando para Internet » PHP »

Acomodo de datos en columna

Estas en el tema de Acomodo de datos en columna en el foro de PHP en Foros del Web. Hola a todos tengo una duda y no encuentro como ingeniármelas con este problemas pero me gustaría pudieran orientarme, tengo una base de datos y ...
  #1 (permalink)  
Antiguo 11/07/2017, 21:40
 
Fecha de Ingreso: diciembre-2009
Mensajes: 16
Antigüedad: 8 años
Puntos: 1
Acomodo de datos en columna

Hola a todos

tengo una duda y no encuentro como ingeniármelas con este problemas pero me gustaría pudieran orientarme, tengo una base de datos y tengo esta columna con los siguientes datos:

columna A
celda 1: 2(A) 6(B,D) 7(D)
celda 2: 4(C,D,E) 5(B)
celda 3: 5(D)

me gustaría acomodarlos como de la siguiente manera

columna B
celda 1: 2(A) 6(B) 6(D) 7(D)
celda 2: 4(C) 4(D) 4(E) 5(B)
celda 3: 5(D)

podría hacer un explode en php y separarlos pero aun así quedarían de la misma manera.

Otra solución creo podría hacer un WHERE buscando con un like y si existe un dato parecido y colocando lo que necesito, pero serian muchas búsquedas
  #2 (permalink)  
Antiguo 12/07/2017, 07:19
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.151
Antigüedad: 2 años, 5 meses
Puntos: 227
Respuesta: Acomodo de datos en columna

bueno lo que te voy a mostrar lo hice con arrays, quiza hay una mejor forma, más rapida y optimizada, asi que estare atento a otras respuestas:

Código PHP:
Ver original
  1. $data = array(
  2.     array(2=>"A",6=>"B,D", 7=>"D"),
  3.     array(4=>"C,D,E",5=>"B"),
  4.     array(5=>"D")
  5.     );
  6.  
  7. $arreglo = array();
  8. //$d = explode(",",$data[0][2]);
  9. foreach ($data as $key => $value) {
  10.     if(is_array($value)){
  11.         $temp = array();
  12.         foreach ($value as $clave => $valor) {
  13.             $d = explode(",",$valor);
  14.             if($d>1){
  15.                 foreach ($d as $keyb => $valueb) {
  16.                     $x = $clave.'('.$valueb.')';
  17.                     array_push($temp, $x);
  18.                 }
  19.             }else{
  20.                 $x = $clave.'('.$valor.')';
  21.                 array_push($temp, $x);
  22.             }
  23.         }
  24.         array_push($arreglo, $temp);
  25.     }
  26. }
  27.  
  28. foreach ($arreglo as $key => $value) {
  29.     $c = count($value);
  30.     for($i=0; $i<$c; $i++){
  31.         echo $value[$i].",";
  32.     };
  33.     echo "<br>";
  34. }

Aqui una muestra funcional:
http://sandbox.onlinephpfunctions.co...89d7d8f67605ba

El resultado de esto es:

2(A),6(B),6(D),7(D),
4(C),4(D),4(E),5(B),
5(D),
__________________
[email protected]
HITCEL
  #3 (permalink)  
Antiguo 12/07/2017, 08:40
Avatar de baldaweb  
Fecha de Ingreso: septiembre-2010
Ubicación: Barco pirata
Mensajes: 207
Antigüedad: 7 años, 2 meses
Puntos: 13
Respuesta: Acomodo de datos en columna

Así a primera vista veo esta posible solución, no escapo de los 3 bucles.

Código PHP:
Ver original
  1. foreach ($data as $v)
  2. {
  3.     foreach ($v as $key => $value)
  4.     {
  5.         $array = explode(",", $value);
  6.         foreach ($array as $v)
  7.         {
  8.             echo $key."(".$v.")";
  9.         }
  10.     }
  11.     print "<br>";
  12. }
__________________
CHOOO COOO LAAA TEEEEEEEEE
  #4 (permalink)  
Antiguo 12/07/2017, 13:01
 
Fecha de Ingreso: diciembre-2009
Mensajes: 16
Antigüedad: 8 años
Puntos: 1
Respuesta: Acomodo de datos en columna

Gracias por responder las dos me funcionan muy bien pero no logro hacer el explode de forma correcta que me funcione de esto a

$celda1= '2(A) 6(B,D) 7(D)';
$celda2= '4(C,D,E) 5(B)';
$celda3= '5(D)';

a esto
Código PHP:

$data 
= array(
    array(
2=>"A",6=>"B,D"7=>"D"),
    array(
4=>"C,D,E",5=>"B"),
    array(
5=>"D")
    ); 
Lo trabajo de la siguiente manera

Código PHP:
/* columna A */
$celda1'2(A) 6(B,D) 7(D)';
$celda2'4(C,D,E) 5(B)';
$celda3'5(D)';


function 
multiexplode ($delimiters,$string) {

    
$ready str_replace($delimiters$delimiters[0], $string);
    
$launch explode($delimiters[0], $ready);
    return  
$launch;
}

    
$exploded multiexplode(array( " ","(",")"),$celda1);
print_r($exploded); 
  #5 (permalink)  
Antiguo 13/07/2017, 05:59
Avatar de baldaweb  
Fecha de Ingreso: septiembre-2010
Ubicación: Barco pirata
Mensajes: 207
Antigüedad: 7 años, 2 meses
Puntos: 13
Respuesta: Acomodo de datos en columna

Te creas una función y haces un bucle con el número de celdas que tengas y llamas a la función.

Te pongo el código a pelo, lo otro (hacer un bucle llamando a la función) es tarea tuya

Código PHP:
Ver original
  1. $celda1= '2(A) 6(B,D) 7(D)';
  2.  
  3. $result = [];
  4.  
  5. $divide = explode( ' ', $celda1 );
  6.  
  7. foreach( $divide as $val ){
  8.   $tmp = explode( '(', $val );
  9.   $result[ $tmp[0] ] = substr($tmp[1],0,-1);
  10. }
  11.  
  12. print_r($result);
__________________
CHOOO COOO LAAA TEEEEEEEEE



La zona horaria es GMT -6. Ahora son las 03:41.