Foros del Web » Programando para Internet » PHP »

Comparar valores de array con una cadena

Estas en el tema de Comparar valores de array con una cadena en el foro de PHP en Foros del Web. Hola, tengo un array multidimensional (de tres niveles), necesito comprobar si existen en él un par de parámetros. Un ejemplo orientativo podría ser este: @import ...
  #1 (permalink)  
Antiguo 08/08/2011, 03:52
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 5 meses
Puntos: 11
Comparar valores de array con una cadena

Hola, tengo un array multidimensional (de tres niveles), necesito comprobar si existen en él un par de parámetros. Un ejemplo orientativo podría ser este:

Código PHP:
Ver original
  1. $array = array(
  2. "nivel 1"=> array("tréboles", "diamantes", "picas", "corazones"),
  3. "nivel 2"=> array("oros", "espadas", "copas", "bastos"),
  4. "nivel 3"=> array("1", "2", "3", "4"));
  5.  
  6. if ($array contiene los  valores "oros" && "copas") {
  7. ...
  8. }

Se me ocurre recorrer el array con un bucle foreach e ir comprobando en cada iteración si el valor se corresponde con alguno de los valores, pero me gustaría saber si hay alguna otra forma más ingeniosa. ¿Se os ocurre algo?
  #2 (permalink)  
Antiguo 08/08/2011, 04:22
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Comparar valores de array con una cadena

No es tridimensional, es bidimensional, es un array de arrays, pero bueno, yo te he buscado una función que te vale para cualquier dimensión.

Está en los comentarios de la función in_array de PHP y se llama in_multiarray. La he probado y funciona perfectamente, pero el array no puede tener campos cuyo índice sea texto, ya que usa for en vez de foreach. Puedes adaptarla si quieres o cambiar tu array (si puedes). Yo la he ejecutado así y funciona bien:
Código PHP:
Ver original
  1. $array = array(array("tréboles", "diamantes", "picas", "corazones"), array("oros", "espadas", "copas", "bastos"), array("1", "2", "3", "4"));
  2.  
  3. if (in_multiarray("oros", $array) && in_multiarray("copas", $array)) {
  4.    echo "...";
  5. }

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #3 (permalink)  
Antiguo 08/08/2011, 04:34
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 5 meses
Puntos: 11
Respuesta: Comparar valores de array con una cadena

Cita:
Iniciado por vgonga1986 Ver Mensaje
No es tridimensional, es bidimensional, es un array de arrays, pero bueno, yo te he buscado una función que te vale para cualquier dimensión.

Está en los comentarios de la función in_array de PHP y se llama in_multiarray. La he probado y funciona perfectamente, pero el array no puede tener campos cuyo índice sea texto, ya que usa for en vez de foreach. Puedes adaptarla si quieres o cambiar tu array (si puedes). Yo la he ejecutado así y funciona bien:
Código PHP:
Ver original
  1. $array = array(array("tréboles", "diamantes", "picas", "corazones"), array("oros", "espadas", "copas", "bastos"), array("1", "2", "3", "4"));
  2.  
  3. if (in_multiarray("oros", $array) && in_multiarray("copas", $array)) {
  4.    echo "...";
  5. }

Un saludo.
Guay, muchísimas gracias, ahora me pongo a ello.

PD: En mi código el array es de tres dimensiones, por eso me confundí, y ahora que lo veo el ejemplo que puse es confuso.
  #4 (permalink)  
Antiguo 08/08/2011, 04:42
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Comparar valores de array con una cadena

Bueno, la solución te vale para cualquier tipo de array, siempre que los índices sean numéricos. Pero puedes adaptar la función, como te dije antes, para cualquier tipo de índice, sólo tienes que modificar los for y poner foreach.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #5 (permalink)  
Antiguo 08/08/2011, 20:44
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 5 meses
Puntos: 11
Respuesta: Comparar valores de array con una cadena

Ya he modificado la función in_multiarray para que busque un determinado valor en un array multidimensional asociativo. La verdad es que debería de existir en PHP una función para esto... es raro que no haya.

Código PHP:
Ver original
  1. function in_multiarray($aguja, $array) {
  2.  
  3. foreach($array as $indice => $valor) {
  4. if($array[$indice] == $aguja) {
  5. return true;
  6. } else {
  7. if(is_array($array[$indice])) {
  8. if(in_multiarray($aguja, ($array[$indice]))) {
  9. return true;
  10. }} else {      
  11. return false;
  12. }}}
  13.  
  14. }

Aquí está el código de la función in_multiarray que busca en arrays multidimensionales no asociativos.

Código PHP:
Ver original
  1. function in_multiarray($aguja, $array) {
  2. $top = sizeof($array) - 1;
  3. $puntero = 0;
  4.  
  5. while($puntero <= $top) {
  6. if($array[$puntero] == $aguja) {
  7. return true;
  8. } else {
  9. if(is_array($array[$puntero])) {
  10. if(in_multiarray($aguja, ($array[$puntero]))) {
  11. return true;
  12. } else {                  
  13. $puntero++;
  14. } }else {      
  15. return false;
  16. }}}
  17.  
  18. }

PD: Sorry si a alguien le molesta la disposición del código.
  #6 (permalink)  
Antiguo 08/08/2011, 23:44
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Comparar valores de array con una cadena

En las notas de los usuarios de la función array_search encontrarás muchas más formas de hacerlo bastante interesantes.

Código PHP:
Ver original
  1. <?php
  2.  
  3. $array = array(
  4.     "nivel 1" => array("tréboles", "diamantes", "picas", "corazones"),
  5.     "nivel 2" => array("oros", "espadas", "copas", "bastos"),
  6.     "nivel 3" => array("1", "2", "3", "4")
  7.     );
  8.  
  9. function buscar($needle, $haystack, $path=array())
  10. {
  11.     foreach($haystack as $id => $val)
  12.     {
  13.          $path2=$path;
  14.          $path2[] = $id;
  15.  
  16.          if($val === $needle)
  17.               return $path2;
  18.          else if(is_array($val))
  19.               if($ret = buscar($needle, $val, $path2))
  20.                    return $ret;
  21.       }
  22.       return false;
  23. }
  24.  
  25. if (buscar('copas', $array) && buscar('oros', $array)) {
  26.     echo 'Se encontraron';
  27. } else {
  28.     echo 'No se encontraron';
  29. }
__________________
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
  #7 (permalink)  
Antiguo 09/08/2011, 00:31
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 5 meses
Puntos: 11
Respuesta: Comparar valores de array con una cadena

andresdzphp gracias :P

¿Me podrías decir si ves un fallo en mi código (el de arriba) porfavor?

Es que me tengo que ir, y así repaso donde está el fallo.

Un saludo.
  #8 (permalink)  
Antiguo 09/08/2011, 02:01
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Comparar valores de array con una cadena

Yo no lo veo mal, es que no te funciona? Si no te funciona le pego un repaso en mayor profundidad.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #9 (permalink)  
Antiguo 09/08/2011, 05:34
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 5 meses
Puntos: 11
Respuesta: Comparar valores de array con una cadena

Cita:
Iniciado por vgonga1986 Ver Mensaje
Yo no lo veo mal, es que no te funciona? Si no te funciona le pego un repaso en mayor profundidad.

Un saludo.
Estaba con prisa, creo que es un fallo de otra parte del código.

Sí, a mi también me parece que está bién.

Etiquetas: cadenas
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 22:39.