Foros del Web » Programando para Internet » PHP »

if dinamico de arrays

Estas en el tema de if dinamico de arrays en el foro de PHP en Foros del Web. Hola estimados tengo la siguiente duda, tengo 2 arrays que se comparan pero son dinamicos, no siempre traen los mismos datos como puedo hacer un ...
  #1 (permalink)  
Antiguo 04/06/2020, 09:36
Avatar de tquezada  
Fecha de Ingreso: febrero-2013
Ubicación: Santiago
Mensajes: 196
Antigüedad: 11 años, 10 meses
Puntos: 8
if dinamico de arrays

Hola estimados tengo la siguiente duda, tengo 2 arrays que se comparan pero son dinamicos, no siempre traen los mismos datos como puedo hacer un if con estos datos

Código PHP:
for ($i=0$i count($data) ; $i++) { 
    
$existe false;
        for (
$k=0$k count($result) ; $k++) { 
            if
            ( 
                (
$data[$i]['OCP_ERP'] == $result[$k]['OCP_ERP']) && 
                (
$data[$i]['N_INVOICE'] == $result[$k]['N_INVOICE'])
            )
            {
                
$existe true;
            }
        }
  } 
el problema es que dentro del if comparo el array $data y $result, pero el array $data es dinamico (pero siempre va a tener los mismos valores que $result para comparar), como hago para que el if sea dinamico.
__________________
¿Sabes cuántos programadores hacen falta para cambiar una bombilla? - no, no ¿Cuántos? - Ninguno... es un problema de hardware.
  #2 (permalink)  
Antiguo 04/06/2020, 13:34
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 9 meses
Puntos: 1146
Respuesta: if dinamico de arrays

Si tienes dos array con la misma estructura y solo cambian sus valores, la forma mas sencilla de compararlos es con un simple y llano IF

Código PHP:
Ver original
  1. <?php
  2. $factura = array(
  3.   'id' => '123',
  4.   'cliente' => 'don benito'
  5. );
  6.  
  7. $result = array(
  8.   'id' => '124',
  9.   'cliente' => 'don benito'
  10. );
  11.  
  12. $result2 = array(
  13.   'id' => '123',
  14.   'cliente' => 'don benito'
  15. );
  16.  
  17. $result3 = array(
  18.   'cliente' => 'don benito',
  19.   'id' => '123'
  20. );
  21.  
  22. var_dump($factura == $result);
  23. var_dump($factura == $result2);
  24. var_dump($factura === $result3);


Nota: que tiene que ser tal cual la misma estructura, fijate en el caso de $result2 y $result3, con solo cambiar el orden ya te dara un falso.

Si hay cabida a que el orden de los datos venga distinto quizás te interese castear los array para compararlos como objetos, a estos no les afecta si cambia el orden de las propiedades mientras tengan los mismo valores.

Código PHP:
Ver original
  1. <?php
  2. $factura = (object) array(
  3.   'id' => '123',
  4.   'cliente' => 'don benito'
  5. );
  6.  
  7. $result = (object) array(
  8.   'id' => '124',
  9.   'cliente' => 'don benito'
  10. );
  11.  
  12. $result2 = (object) array(
  13.   'id' => '123',
  14.   'cliente' => 'don benito'
  15. );
  16.  
  17. $result3 = (object) array(
  18.   'cliente' => 'don benito',
  19.   'id' => '123'
  20. );
  21.  
  22. var_dump($factura == $result);
  23. var_dump($factura == $result2);
  24. var_dump($factura == $result3);
  25. var_dump($factura === $result2);
  26. var_dump($factura === $result3);


Nota2: la comparación de objetos se tiene que hacer con == si utilizas el === solo funciona si hacen referencia a la misma instancia

Última edición por ArturoGallegos; 04/06/2020 a las 13:40
  #3 (permalink)  
Antiguo 04/06/2020, 13:38
Avatar de tquezada  
Fecha de Ingreso: febrero-2013
Ubicación: Santiago
Mensajes: 196
Antigüedad: 11 años, 10 meses
Puntos: 8
Respuesta: if dinamico de arrays

Gracias ArturoGallegos por tu respuesta, el tema es que los indices son dinámicos, algunas veces viene así
Código PHP:
$factura = array(
  
'id' => '123',
  
'cliente' => 'don benito'
);
 
$result = array(
  
'id' => '124',
  
'cliente' => 'don benito'
); 
pero otras

Código PHP:
$factura = array(
  
'datos' => '123',
  
'nombre' => 'don benito'
);
 
$result = array(
  
'datos' => '124',
  
'nombre' => 'don benito'
); 
__________________
¿Sabes cuántos programadores hacen falta para cambiar una bombilla? - no, no ¿Cuántos? - Ninguno... es un problema de hardware.
  #4 (permalink)  
Antiguo 04/06/2020, 13:54
Avatar de tquezada  
Fecha de Ingreso: febrero-2013
Ubicación: Santiago
Mensajes: 196
Antigüedad: 11 años, 10 meses
Puntos: 8
Respuesta: if dinamico de arrays

tengo este if, que compara esas 2 variables

Código PHP:
if

 (
$data[$i]['OCP_ERP'] == $result[$k]['OCP_ERP']) &&
 (
$data[$i]['N_INVOICE'] == $result[$k]['N_INVOICE']) 

pero a veces el arreglo $data y $result podría venir así

Código PHP:
if

 (
$data[$i]['IP'] == $result[$k]['IP']) &&
 (
$data[$i]['PO'] == $result[$k]['PO']) 

como hago para que el indice sea dinámico dentro del if
__________________
¿Sabes cuántos programadores hacen falta para cambiar una bombilla? - no, no ¿Cuántos? - Ninguno... es un problema de hardware.
  #5 (permalink)  
Antiguo 04/06/2020, 13:57
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 9 meses
Puntos: 1146
Respuesta: if dinamico de arrays

Si los indices son distintos tienes un problema de enfoque en tu arquitectura, si trabajan en equipo deben sentarse a definir todo antes de continuar y ejecutar el requerimiento.

Si eres tu solo, pues dale duro a la plantación para que homologues esto.

Yo se que muchas veces tendemos a obviar y dejar de lado la planeación, pero la consecuencia es esta, que todo este disperso y nada homologado.

Tu alternativa es seguir con el for o foreach tal cual lo tienes, haciendo ajustes manuales cada que lo necesites, pero ya has visto que es poco eficiente, ni para el servidor ni para ti.


Edito: una alternativa que me viene a la mente que es mas sencillo que un for o fereach es usar array_values y array_combine

Código PHP:
Ver original
  1. <?php
  2.  
  3. $factura = (object) array(
  4.   'id' => '123',
  5.   'cliente' => 'don benito'
  6. );
  7.  
  8. $result2 = array(
  9.   'taco' => '123',
  10.   'mole' => 'don benito'
  11. );
  12.  
  13. $indexList = ['id', 'cliente'];
  14.  
  15. $n_array = (object) array_combine($indexList, array_values($result2));
  16.  
  17. var_dump($factura == $n_array);

Última edición por ArturoGallegos; 04/06/2020 a las 14:06

Etiquetas: arrays, dinamicos, ifelse
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




La zona horaria es GMT -6. Ahora son las 10:13.