TransWikia.com

Comparar arrays en php

Stack Overflow en español Asked on December 30, 2021

Tengo dos arrays en php; el primer arrray se va armando en base a números al azar y puede tener hasta 99 posiciones, el segundo array solo tiene 14 posiciones. Necesito comparar el primero con el segundo hasta que todos los datos del primer array se encuentren en el segundo array y así devolver un TRUE, no se si me explico bien. Dejo dos ejemplos, por si acaso.

array ( [0] => 3 [1] => 15 [2] => 21 [3] => 27 [4] => 30 [5] => 36 
[6] => 39 [7] => 46 [8] => 51 [9] => 52 [10] => 55 [11] => 62 [12] => 64 
[13] => 80 [14] => 81 [15] => 82 [16] => 87 [17] => 88 [18] => 90 ) 
//primer array, que se forma al azar

//Segundo array, solo tiene 14 posiciones
array ( [0] => 67 [1] => 89 [2] => 8 [3] => 35 [4] => 39 [5] => 54 
[6] => 98 [7] => 73 [8] => 13 [9] => 72 [10] => 46 [11] => 60 
[12] => 26 [13] => 9 [14] => 23 )

Agradecería una respuesta gracias

3 Answers

Podría ser interesante el uso de array_diff() para este caso:

Compara array1 con uno o más arrays y devuelve los valores de array1 que no estén presentes en ninguno de los otros arrays.

Si sólo quieres saber si todos los elementos de $smallArrayestán en $bigArray, bastaría con algo como esto:

$status = !array_diff($smallArray, $bigArray) ? TRUE : FALSE;

Ahí, $status será TRUE o FALSE según el caso.

Veamos dos ejemplos simples:

Todos existen:

$bigArray=array (3,15,21,27,30,36,39,46,51,52,55,62,64,80,81,82,87,88,90); 
$smallArray=array (3,15);
$status = !array_diff($smallArray, $bigArray) ? TRUE : FALSE;

Salida:

bool(true)

No todos existen:

$bigArray=array (3,15,21,27,30,36,39,46,51,52,55,62,64,80,81,82,87,88,90); 
$smallArray=array (3,15,101);
$status = !array_diff($smallArray, $bigArray) ? TRUE : FALSE;

Salida:

bool(false)

Otro aspecto que puede ser interesante es que array_diff te devuelve un array con los elemento no existentes. Si haces un var_dump($tatus); en el último ejemplo, tendrás esto:

array(1) {
  [2]=>
  int(101)
}

Te mostrará el elemento que no existe en $bigArray y el índice que ese elemento ocupa en $smallArray.

Answered by A. Cedano on December 30, 2021

puedes hacerlo asi:

$arr = array();
$arr2=array(23,45,23,56,76,45,12,34,45,56,67,78,23,43);

for ($i=0;$i<100;$i++) {
  array_push($arr,$i);
}

function verificar($arr,$arr2){
  // contador
  $contador=0;
  // recorremos el arreglo 2
  // 14 ciclos es mas rapido que 100
  foreach($arr2 as $val){
    //validamos que el valor exista dentro del arreglo 
    if (in_array($val, $arr)) {
        // aumentamos en 1 el contador
       $contador++;
    }
  }
  // retorna true
  // si todos los elementos estan el arreglo
  // ejemplo 14 == 14 //true
  // ejemplo 13 == 14 //false
  return $contador === count($arr2);
}



echo verificar($arr,$arr2) ? "todos estan en el arreglo":"faltan elementos en el arreglo";

Answered by Bryro on December 30, 2021

<?php

$valores = array();
$valores2=array(23,45,23,56,76,45,12,34,45,56,67,78,23,43);

$max_num = 99;

for ($x=0;$x<$max_num;$x++) {
  $num_aleatorio = rand(1,100);
  array_push($valores,$num_aleatorio);
}
  echo "</br>";

for($i=0;$i<count($valores2);$i++){
  echo $valores2[$i];
  echo "</br>";
 echo $valores[$i];
  echo "</br>";

      if($valores2[$i]==$valores[$i]){
    
        echo "true";
      }else{

        echo "false";
      }

}

 ?>

aqui retorna true cuando los valores coinciden en los primeros 14 espero que sea lo que buscas

Answered by Alberto Julio Arce Escolar on December 30, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP