Foros del Web » Programando para Internet » PHP »

No mostrar valores duplicados en un array multidimensional

Estas en el tema de No mostrar valores duplicados en un array multidimensional en el foro de PHP en Foros del Web. Hola a [email protected] Tengo un select que relleno con los valores de un array y necesito que en las opciones de ese select no me ...
  #1 (permalink)  
Antiguo 22/10/2019, 13:27
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 5 años, 10 meses
Puntos: 2
No mostrar valores duplicados en un array multidimensional

Hola a [email protected]
Tengo un select que relleno con los valores de un array y necesito que en las opciones de ese select no me aparezcan valores repetidos y la función array_unique no me sirve porque no funciona en los arrays multidimensión
Código PHP:
Ver original
  1. $animales = array( //Declara el array
  2.                         array('Perro','mastin'),
  3.                         array('Pajaro','jilguero'),
  4.                         array('Perro','doberman'),
  5.                      );
  6.                      
  7. foreach ($animales as $valor){
  8.  $con_duplicados = $valor[0];
  9.  echo $con_duplicados . "<br/>";    
  10. }
Así que en el select, en las opciones me debería aparecer Perro una sola vez y Pajaro, dos opciones sólo, pero no se como hacerlo
  #2 (permalink)  
Antiguo 22/10/2019, 20:00
Avatar de alvaro_trewhela  
Fecha de Ingreso: octubre-2012
Ubicación: localhost
Mensajes: 970
Antigüedad: 7 años
Puntos: 111
Respuesta: No mostrar valores duplicados en un array multidimensional

Tiempo sin postear.


Si lo que deseas es quedarte sólo con la la primera columna y sin repetición:


Código PHP:
Ver original
  1. <?php
  2.  
  3. $m = /* tu matriz*/
  4. $selectArr = [];
  5.  
  6. for($k=0;k<len($m);$k++)
  7.     if(!in_array($m[$k][0], $selectArr))
  8.         array_push($selectArr, $m[$k][0]);
  9. ?>
  10.  
  11. <select>
  12. <?php
  13. for($k=0;$k<len($selectArr);$k++)
  14.     echo '<option value="'.$selectArr[$k].'">'.$selectArr[$k].'</select>';
  15. ?>
  16. </select>

Saludos

P.S: No lo probé, pero espero se entienda la idea
  #3 (permalink)  
Antiguo 23/10/2019, 17:38
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 5 años, 10 meses
Puntos: 2
Respuesta: No mostrar valores duplicados en un array multidimensional

No me funciona y lo que quiero es que me muestre los valores de la primera columna, pero sin mostrar los duplicados
  #4 (permalink)  
Antiguo 23/10/2019, 21:02
 
Fecha de Ingreso: abril-2006
Mensajes: 313
Antigüedad: 13 años, 6 meses
Puntos: 60
Respuesta: No mostrar valores duplicados en un array multidimensional

pues crea otro array de tipo diccionario y como valor clave el campo 1

Código PHP:
$animales = array( //Declara el array 
                        
array('Perro','mastin'),
                        array(
'Pajaro','jilguero'),
                        array(
'Perro','doberman'),
                     );
 
$animales_unicos=array();
foreach (
$animales as $valor){        
         
//si no existe entramos al IF  
        
if(isset($animales_unicos$valor[0]  ]) ==false ){
             
$animales_unicos[$valor[0] ] = $valor;
              
$animales_unicos[$valor[0] ][2]='no_duplicado';
        }else{
               
$animales_unicos[$valor[0] ][2]='duplicado';
        }
}
foreach (
$animales_unicos as $valor){

 
$con_duplicados $valor[0]; 
 echo (
$valor[2]=='duplicado'
   
'tiene duplicados ' .$con_duplicados
   
'No tiene duplicados en '$con_duplicados ). "<br/>";

listo con ello ya tienes el control de duplicados o no, incluso a uno le podrias poner un incremental para saber cuantos duplicados tienes
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.me/pools/c/87BTML2gwr
  #5 (permalink)  
Antiguo 23/10/2019, 21:55
Avatar de alvaro_trewhela  
Fecha de Ingreso: octubre-2012
Ubicación: localhost
Mensajes: 970
Antigüedad: 7 años
Puntos: 111
Respuesta: No mostrar valores duplicados en un array multidimensional

lol tenía mil errores mi coso:

Código PHP:
Ver original
  1. <?php
  2.      
  3.     $m = array( //Declara el array
  4.                         array('Perro','mastin'),
  5.                         array('Pajaro','jilguero'),
  6.                         array('Perro','doberman'),
  7.                      );
  8.     $selectArr = [];
  9.      
  10.     for($k=0;$k<sizeof($m);$k++)
  11.         if(!in_array($m[$k][0], $selectArr))
  12.             array_push($selectArr, $m[$k][0]);
  13.     ?>
  14.      
  15.     <select>
  16.     <?php
  17.     for($k=0;$k<sizeof($selectArr);$k++)
  18.         echo '<option value="'.$selectArr[$k].'">'.$selectArr[$k].'</option>';
  19.     ?>
  20.     </select>
  #6 (permalink)  
Antiguo 27/10/2019, 04:06
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 5 años, 10 meses
Puntos: 2
Respuesta: No mostrar valores duplicados en un array multidimensional

Muchas gracias a los dos, funciona perfectamente, ahora una última consulta, se puede, con php crear otro select dependiendo del primero y que al pinchar en el primer select, por ejemplo en perro, en el segundo select me aparezca mastin y doberman, en javascript lo tengo hecho, pero en php, estoy empezando, no se si se puede
  #7 (permalink)  
Antiguo 27/10/2019, 12:44
 
Fecha de Ingreso: abril-2006
Mensajes: 313
Antigüedad: 13 años, 6 meses
Puntos: 60
Respuesta: No mostrar valores duplicados en un array multidimensional

Cita:
Iniciado por pedromir Ver Mensaje
Muchas gracias a los dos, funciona perfectamente, ahora una última consulta, se puede, con php crear otro select dependiendo del primero y que al pinchar en el primer select, por ejemplo en perro, en el segundo select me aparezca mastin y doberman, en javascript lo tengo hecho, pero en php, estoy empezando, no se si se puede
se puede, solo que necesitas recolectar la informacion y acceder a ella, en javascript, las variables no se pierden, por que su proceso no termina hasta que refresquen la pagina o lo cierren, en caso de PHP, es al lineal, Inicia y termina.

sabiendo que php es lineal, para lograr lo que quieres, debes tener en cuenta ello.

asi que el proceso seria
  1. Crear tu array de datos
  2. Funcion que resiva los datos del formulario y del select
  3. crear una funciona que muestre el HTML correspondiente, osea el select
  4. mostrar un bucle recurrente y renderizar el html, dependiendo de como este tu array,matriz
en resumen seria algo asi

Código PHP:
<?php
$array_gatos
=array(
        
'negro'=>array(
            
'label'=>'Gato negro'
        
),
        
'blanco'=>array(
            
'label'=>'Gato Blanco siames'
        
),
    
);
$datos=array(
    
"perros"=>array(
        
"label"=>'Perrors',
        
"lista"=>array(
            
'coocker'=>array(
                
"label" => 'perro orejas de salchicha'

            
),
            
'labrador'=>array(
                
"label" => 'perro Labrador'

            
)
        )

    ),
    
"gatos"=>array(
            
"label"=>'Muchos gatos',
            
"lista"=>&$array_gatos
    
)
);

function 
crearSelect($arrayConFormato,$name_select='Nombre del valor del select',$default_id=''){
    
//es bueno tener comentado, en cada funcion un ejemplo de argumento
    //$arrayConFormato=array('id'=>array("label"=>'texto_a_mmostrar') );
    
echo "<select name='$name_select'>";
    foreach(
$arrayConFormato as $id => $array){
        
$seleccionado$default_id==$id?'selected="selected"':'';//si esta opcion fue elegida
        
echo "<option value='$id' $seleccionado>".$array['label']." </option>";
    }
    echo 
"</select>";
}

echo 
"<form method='get'>";
//creamos el primer select
echo crearSelect($datos,'animales',@$_GET['animales']);
//Verificamos si escogio algun animal en el select
if(isset($_GET['animales'])){
    echo 
"<br/>";
    echo 
crearSelect($datos[$_GET['animales']]['lista'],$_GET['animales']);
}
echo 
"<br/>";
echo 
"<button>Enviar seleccion</button>";
echo 
"</form>";
pero bueno hacer un sistema asi donde el GUI es netamente en PHP, no es necesario en estos tiempo, debido a que la amyoria esta actualizando equipos y demas, excepto si quieres hacer una WEB para la deepWeb donde esta desactivado el javascript


para las demas cosas, yo te sugeriria que uses javascript en tema de manipulación de del interfaz
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.me/pools/c/87BTML2gwr
  #8 (permalink)  
Antiguo 28/10/2019, 04:20
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 5 años, 10 meses
Puntos: 2
Respuesta: No mostrar valores duplicados en un array multidimensional

Ante todo gracias por tu interés, al utilizar php si selecciono una opcion en el primer select, tengo que hacer una petición al sevidor, para que me devuelva el segundo select con las opciones correspondientes a lo seleccionado en el primero, pero eso no me interesa, lo que yo quiero, pero me imagino que eso tendrá que ser con javascript, y es utilizando la función onChange="" pues que autómaticamente me muestre en el segundo select dichas opciones y pero no consigo que la función de javascript me recoja la opción seleccionada del primer select y me haga la busqueda para mostrarme las opciones correspondientes en el segundo select a dicha selección del primero y es que a lo mejor no se puede lo que yo pretendo hacer
  #9 (permalink)  
Antiguo 28/10/2019, 13:03
 
Fecha de Ingreso: abril-2006
Mensajes: 313
Antigüedad: 13 años, 6 meses
Puntos: 60
Respuesta: No mostrar valores duplicados en un array multidimensional

Cita:
Iniciado por pedromir Ver Mensaje
Ante todo gracias por tu interés, al utilizar php si selecciono una opcion en el primer select, tengo que hacer una petición al sevidor, para que me devuelva el segundo select con las opciones correspondientes a lo seleccionado en el primero, pero eso no me interesa, lo que yo quiero, pero me imagino que eso tendrá que ser con javascript, y es utilizando la función onChange="" pues que autómaticamente me muestre en el segundo select dichas opciones y pero no consigo que la función de javascript me recoja la opción seleccionada del primer select y me haga la busqueda para mostrarme las opciones correspondientes en el segundo select a dicha selección del primero y es que a lo mejor no se puede lo que yo pretendo hacer
para ello es javascript, pero primero tienes que saber como trabajar, si CON AJAX o DAtos estatitos, por ejemplo en este foro hay ejemplo con AJAX

http://www.forosdelweb.com/f13/selec...lores-1163164/
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.me/pools/c/87BTML2gwr
  #10 (permalink)  
Antiguo 28/10/2019, 22:06
Avatar de alvaro_trewhela  
Fecha de Ingreso: octubre-2012
Ubicación: localhost
Mensajes: 970
Antigüedad: 7 años
Puntos: 111
Respuesta: No mostrar valores duplicados en un array multidimensional

Para lo último que pides, te recomiendo usar ajax.
  #11 (permalink)  
Antiguo 31/10/2019, 03:57
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 5 años, 10 meses
Puntos: 2
Respuesta: No mostrar valores duplicados en un array multidimensional

Son datos estáticos, seguiré intentándolo con javascript, a ver si lo consigo
  #12 (permalink)  
Antiguo 31/10/2019, 12:10
Avatar de alvaro_trewhela  
Fecha de Ingreso: octubre-2012
Ubicación: localhost
Mensajes: 970
Antigüedad: 7 años
Puntos: 111
Respuesta: No mostrar valores duplicados en un array multidimensional

Lo que sucede es que te recomiendo ajax, ya que cuando haces select dependientes, por lo general es para no tener que hacer un javascript bestia que tanga todos las dependencias y más si quieres hacer un sistema escalable. En vez de enviar todo de una, es mejor ir brindándole al usuario los dato que requiera.

Saludos
  #13 (permalink)  
Antiguo 01/11/2019, 02:56
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 5 años, 10 meses
Puntos: 2
Respuesta: No mostrar valores duplicados en un array multidimensional

Ya estoy viendo que para hacer lo que yo quiero, sólo con javascript no se puede hacer, necesito ajax también, así que buscaré por internet a ver que encuentro, porque de ajax no tengo ni idea, gracias por vuestro interés



La zona horaria es GMT -6. Ahora son las 21:55.