Foros del Web » Programando para Internet » PHP »

Unir valores de un Array

Estas en el tema de Unir valores de un Array en el foro de PHP en Foros del Web. Hola a todos. Una pregunta que espero no sea muy complicada... Como resultado de una consulta SQL, obtengo tres campos de valores que cargo en ...
  #1 (permalink)  
Antiguo 23/08/2011, 11:10
 
Fecha de Ingreso: agosto-2011
Mensajes: 5
Antigüedad: 8 años, 6 meses
Puntos: 1
Pregunta Unir valores de un Array

Hola a todos. Una pregunta que espero no sea muy complicada...

Como resultado de una consulta SQL, obtengo tres campos de valores que cargo en tras arrays de la siguiente forma:

Código PHP:
$result=odbc_exec($conn$query);
    
    
//save data into array.
    //query.1
    
$Codigo = array();
    
$Texto = array();
    
$Stock = array();
    while (
$resulSelect odbc_fetch_array($result)) { 
        
//array_push($resul, $resulSelect); 
        
$Codigo[] = $resulSelect['Codigo']; 
        
$Texto[] = $resulSelect['Texto'];
        
$Stock[] = $resulSelect['Stock'];
    } 
Hasta aquí bien. Mi problema es que ahora necesito Unir los valores de esos arrays cuya primera parte del código coincida. Es decir, si el código son 15 caracteres en todos los casos, necesito unir aquellos códigos cuyos, por ejemplo, 10 primeros caracteres sean iguales. Los nuevos arrays deberían mostrar la nueva cadena de código, la primera descripción y la suma de sus stocks.

Por ejemplo:

Codigo[1] = 12345678910111X
Texto[1] = Balón
Stock[1] = 245

Codigo[2] = 12345678910111G
Texto[2] = Balón
Stock[2] = 132

La unión de los arrays tendría que dar como resultado:

Codigo[1] = 12345678910111X
Texto[1] = Balón
Stock[1] = 377 (245+132)

Los elementos de los arrays que no coincidan seguirán igual.


Mi problema es que, aunque tengo más o menos calaras las funciones a aplicar para comparar cadenas o sumar los stocks, no tengo tan claro cómo hacer esa comparación o cómo recorro el array para comparar sus elemento entre si.

Gracias a todos por vuestra atención y saludos.
  #2 (permalink)  
Antiguo 23/08/2011, 13:05
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 11 años, 9 meses
Puntos: 528
Respuesta: Unir valores de un Array

Puedes hacer algo como ésto:
Código PHP:
Ver original
  1. while ($resulSelect = odbc_fetch_array($result)) {
  2.         //array_push($resul, $resulSelect);
  3.         $cod=substr($resulSelect['Codigo'],0,10);//extraes los primeros 10 caracteres coincidenteso los que quieras
  4.         if(isset($Codigo[$cod][$resulSelect['Texto']]))
  5.                 $Codigo[$cod][$resulSelect['Texto']]+=$resulSelect['Stock'];
  6.         else
  7.                 $Codigo[$cod][$resulSelect['Texto']]=$resulSelect['Stock'];
  8.     }

así meterías todos los articulos en el array y sólo necesitarías recorrerlo:

Código PHP:
Ver original
  1. foreach($Codigo as $cod =>$m)
  2.         foreach($m as $articulo =>$cant)
  3.                   echo "$articulo $cod stock: $cant";
  #3 (permalink)  
Antiguo 23/08/2011, 14:25
 
Fecha de Ingreso: agosto-2011
Mensajes: 5
Antigüedad: 8 años, 6 meses
Puntos: 1
Respuesta: Unir valores de un Array

Bueno. El campo de texto puede variar ligeramente. Sólo me interesaba el campo del código, así que he partido de tu código y lo he dejado así...

(Puedes comentar a ver qué te parece)

Código PHP:
//save data into array.
    //query.1
    
$articulo=array();
    while (
$resulSelect odbc_fetch_array($result)) { 
        
//array_push($resul, $resulSelect);
        
$cod=substr($resulSelect['Codigo'],0,15);
        
        if(isset(
$articulo[$cod]))
            
$articulo[$cod][1]+=($resulSelect['Stock']);
        else {
            
$articulo[$cod][0]=$resulSelect['Texto'];
            
$articulo[$cod][1]=($resulSelect['Stock']);
        }    
        
        
//$articulo[] = array($resulSelect['Codigo'], $resulSelect['Texto'], $resulSelect['Precio']);
    

Muchas gracias por tu ayuda porque estaba bloqueado.

Saludos.
  #4 (permalink)  
Antiguo 23/08/2011, 14:39
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 8 años, 7 meses
Puntos: 793
Respuesta: Unir valores de un Array

Bueno no se si te sirva este código, pero me divertí mucho haciendo esto, si le puedes sacar algún provecho bien y sino también. Lo que hace es combinar los array repetidos y suma sus stock. Sino te sirve tal vez a alguién le servirá en un futuro por eso lo dejo. Saludos

Código PHP:
Ver original
  1. <?php
  2.  
  3. $codigo[0] = '666666666666X';
  4. $texto[0] = 'Carro';
  5. $stock[0] = 348;
  6.  
  7. $codigo[1] = '12345678910111X';
  8. $texto[1] = 'Balón';
  9. $stock[1] = 245;
  10.  
  11. $codigo[2] = '12345678910111G';
  12. $texto[2] = 'Balón';
  13. $stock[2] = 132;
  14.  
  15. $codigo[3] = '999999999999H';
  16. $texto[3] = 'Ejemplo';
  17. $stock[3] = 99;
  18.  
  19. $codigo[4] = '999999999999C';
  20. $texto[4] = 'Ejemplo';
  21. $stock[4] = 765;
  22.  
  23. $codigo[5] = '222222222222J';
  24. $texto[5] = 'Ejemplo 2';
  25. $stock[5] = 123;
  26.  
  27. $codigo[6] = '222222222222C';
  28. $texto[6] = 'Ejemplo 2';
  29. $stock[6] = 22;
  30.  
  31. $arr = array(); //Array auxiliar para sacar repetidos
  32. $nc = array(); //Array para almacenar los nuevos codigos
  33. $nt = array(); //Array para almacenar los nuevos textox
  34. $ns = array(); //Array para almacenar los nuevos stock
  35. $x = 0; //Variable contador de repetidos
  36.  
  37. //Recorremos 2 veces el array de los códigos para encontrar repetidos
  38. foreach ($codigo as $i => $cod) {
  39.     foreach ($codigo as $i2 => $cod2) {
  40.         //Comparamos que los 10 primeros caracteres del codigo sean iguales
  41.         //y que no se haga agregado en el array auxiliar de repetidos.
  42.         if (substr($cod, 0, 10) == substr($cod2, 0, 10) && ! in_array($cod, $arr)) {
  43.             //Si se cumple la condición sumamos un repetido.
  44.             $x++;
  45.         }
  46.     }
  47.     /*Si el numero de repetidos es mayor o igual a 2 entonces agregamos el codigo
  48.     al array auxiliar. Si no es repetido entonces agregamos los datos a los array
  49.     tal como vienen de los array originales.*/
  50.     if ($x >= 2) {
  51.         $arr[$i] = $cod;
  52.     } else if ($x == 1) {
  53.         $nc[] = $cod;
  54.         $nt[] = $texto[$i];
  55.         $ns[] = $stock[$i];
  56.     }
  57.     //Devolvemos el contador de repetidos a cero para seguir con el seguiente código.
  58.     $x = 0;
  59. }
  60.  
  61. //Dividimos el array en parejas (No hice el ejemplo para encontrar más de 2 coincidencias)
  62. $res = array_chunk($arr, 2);
  63.  
  64. //Recorremos todas las parejas de repetidos
  65. foreach ($res as $clave => $valor) {
  66.     //Sacamos los indices del código uno para sacarle el texto.
  67.     $arrs = array_search($res[$clave][0], $arr);
  68.     //Sacamos los indices del código dos para poder sumarlos.
  69.     $arrsc = array_search($res[$clave][1], $arr);
  70.     //Agregamos al array los numeros
  71.     $nc[] = $res[$clave][0];
  72.     //Agregamos al array los textox
  73.     $nt[] = $texto[$arrs];
  74.     //Sumamos los 2 codigos y agregamos al array el resultado.
  75.     $ns[] = $stock[$arrs] + $stock[$arrsc];
  76. }
  77.  
  78. //Por último imprimo los array.
  79. echo '<pre>';
  80. print_r($nc);
  81. print_r($nt);
  82. print_r($ns);
  83. echo '</pre>';
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 23/08/2011, 16:18
 
Fecha de Ingreso: agosto-2011
Mensajes: 5
Antigüedad: 8 años, 6 meses
Puntos: 1
Respuesta: Unir valores de un Array

Cita:
Iniciado por andresdzphp Ver Mensaje
Bueno no se si te sirva este código, pero me divertí mucho haciendo esto, si le puedes sacar algún provecho bien y sino también. Lo que hace es combinar los array repetidos y suma sus stock. Sino te sirve tal vez a alguién le servirá en un futuro por eso lo dejo. Saludos
Si que te has divertido, si ..

Lo cierto es que yo lo había empezado a hacer así, pero me pareció tan enrevesado que me puse a buscar una función que hiciera esto mismo. Después ya me bloqueé y al foro a ver si me sacaban del hoyo ...

El código de ocp es mucho más simple y además evita tener que recorrer los arrays, ya que se carga todo desde el inicio.

Muchas gracias a todos. De verdad.
  #6 (permalink)  
Antiguo 23/08/2011, 18:41
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 8 años, 7 meses
Puntos: 793
Respuesta: Unir valores de un Array

Bueno yo sigo jugando con arrays, esta vez ya no encuentra parejas sino que encuentra todos los códigos repetidos (las 10 primeras letras). Agrega al nuevo array el código y el texto del primer resultado y suma sus stock. Lo más curioso es que con menos código hace más que el anterior. Espero que no este haciendo ningún mal con esta práctica de arrays y le sea útil a a alguién.

Código PHP:
Ver original
  1. <?php
  2.  
  3. $codigo[0] = '666666666666X';
  4. $texto[0] = 'Carro';
  5. $stock[0] = 348;
  6.  
  7. $codigo[1] = '12345678910111X';
  8. $texto[1] = 'Balón';
  9. $stock[1] = 245;
  10.  
  11. $codigo[2] = '12345678910111G';
  12. $texto[2] = 'Balón';
  13. $stock[2] = 132;
  14.  
  15. $codigo[3] = '999999999999H';
  16. $texto[3] = 'Ejemplo';
  17. $stock[3] = 99;
  18.  
  19. $codigo[4] = '999999999999C';
  20. $texto[4] = 'Ejemplo';
  21. $stock[4] = 765;
  22.  
  23. $codigo[5] = '222222222222J';
  24. $texto[5] = 'Ejemplo 2';
  25. $stock[5] = 123;
  26.  
  27. $codigo[6] = '222222222222C';
  28. $texto[6] = 'Ejemplo 2';
  29. $stock[6] = 22;
  30.  
  31. $codigo[7] = '222222222222X';
  32. $texto[7] = 'Ejemplo 2';
  33. $stock[7] = 98;
  34.  
  35. $arr = array();
  36. $nc = array();
  37. $nt = array();
  38. $ns = array();
  39. $x = 0;
  40. $sumas = 0;
  41.  
  42. foreach ($codigo as $i => $cod) {
  43.     foreach ($codigo as $i2 => $cod2) {
  44.         if (substr($cod, 0, 10) == substr($cod2, 0, 10) && ! in_array($cod, $arr)) {
  45.             $x++;
  46.             $sumas += $stock[$i2];
  47.             unset($codigo[$i2]);
  48.         }
  49.     }
  50.     if ($x >= 2) {
  51.         $arr[$i] = $cod;
  52.         $nc[] = $cod;
  53.         $nt[] = $texto[$i];
  54.         $ns[] = $sumas;
  55.     } else if ($x == 1) {
  56.         $nc[] = $cod;
  57.         $nt[] = $texto[$i];
  58.         $ns[] = $stock[$i];
  59.     }
  60.     $x = 0;
  61.     $sumas = 0;
  62. }
  63.  
  64. echo '<pre>';
  65. print_r($nc);
  66. print_r($nt);
  67. print_r($ns);
  68. echo '</pre>';
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Etiquetas: arrays
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




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