Foros del Web » Programando para Internet » PHP »

Saber si un array co tiene oteo array mas pequello

Estas en el tema de Saber si un array co tiene oteo array mas pequello en el foro de PHP en Foros del Web. Lo que intento es saber si un array pequello esta dentro de otro array mas grande. Saber si hay una manera sencilla y rápida de ...
  #1 (permalink)  
Antiguo 07/04/2018, 03:55
 
Fecha de Ingreso: enero-2011
Mensajes: 1.133
Antigüedad: 7 años, 6 meses
Puntos: 10
Saber si un array co tiene oteo array mas pequello

Lo que intento es saber si un array pequello esta dentro de otro array mas grande. Saber si hay una manera sencilla y rápida de saberlo.
Código PHP:
Ver original
  1. $array_principal=array(1,3,5,7,9,11,13,44,33);
  2. $array2=array(5,7,9);
  3. $array3=array(1,5,7,9);
Para que quede mas claro el array principal es el que tiene que contener los demas array,el array1 si que tendria que detectar pero el array2 no.
Tienen que tener el array en el mismo orden y con todos sus valores.
Saludos
  #2 (permalink)  
Antiguo 07/04/2018, 13:22
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.796
Antigüedad: 8 años, 10 meses
Puntos: 213
Respuesta: Saber si un array co tiene oteo array mas pequello

Podría usarse array_intersect_key, pero solo verifica que esten los valores,
pero no en el mismo orden.

En cuyo caso, lo que se podría hacer entonces es recorrer el array pequeño,
luego dentro de este recorrido también iterar sobre el array grande,
e ir preguntando posición contra posición

(teniendo en cuenta que por ej, array2 su valor inicial es 5, pero el valor inicial de array_principal es 1,
por lo cual se debe controlar que en el primer recorrido del array grande, alguna de las posiciones sea igual al valor inicial del segundo array,
y guardar en otra variable la posición actual del array principal, para que en las demás iteraciones no recorra todo el array, sino que empiece
en esta posición ya encontrada en la primera iteración)

Y si en algún punto el valor no coincide, pues se termina el recorrido en ambos arrays
retornando false, en caso contrario, retornar true.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 07/04/2018, 14:59
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.352
Antigüedad: 3 años
Puntos: 253
Respuesta: Saber si un array co tiene oteo array mas pequello

Yo haria algo así:

Código PHP:
Ver original
  1. $array_principal=array(1,3,5,7,9,11,13,44,33);
  2. $no = array();//Valores no encontrados
  3. $si = array();//Valores encontrados
  4.  
  5. $data = array(
  6.     array(5,7,9),
  7.     array(1,5,7,9,190)
  8. );
  9.  
  10. //Recorro el compilado de arreglos
  11. foreach($data as $item){
  12.     //Verifico si el valor es un array y contienene valores
  13.     if(is_array($item) && count($item)>=1){
  14.         //Si es positivo, recorro en item
  15.         foreach($item as $val){
  16.             //Valido si el valor se encuentra en el principal
  17.             if(in_array($val, $array_principal)){
  18.                 //Si es positivo lo agrego al arreglo de control si
  19.                 if(!in_array($val,$si)){
  20.                     array_push($si,$val);
  21.                 }
  22.             }else{
  23.                 //Si es negativo lo agrego al arreglo de control no
  24.                 if(!in_array($val,$no)){
  25.                     array_push($no,$val);
  26.                 }
  27.             }
  28.         }
  29.     }
  30. }
  31. echo "No estan en el Principal:<br>";
  32. var_dump($no);
  33. echo "<br>";
  34. echo "Si estan en el Principal:<br>";
  35. var_dump($si);

esto retorna algo mas o menos así:

No estan en el Principal:
array(1) { [0]=> int(190) }
Si estan en el Principal:
array(4) { [0]=> int(5) [1]=> int(7) [2]=> int(9) [3]=> int(1) }

claro mi respuesta es algo burda por la falta de más detalles sobre tu trabajo y la finalidad de esto, pero al menos es una idea. Saludos
__________________
[email protected]
HITCEL



La zona horaria es GMT -6. Ahora son las 15:25.