Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Busqueda en un ARREGLO

Estas en el tema de Busqueda en un ARREGLO en el foro de PHP en Foros del Web. Hola mis amiguis, gusto saludarles nuevamente. He creado un arreglo con algunos datos de la base de datos y funciona correctamente. Antes yo realizaba la ...
  #1 (permalink)  
Antiguo 21/05/2017, 17:29
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 9 años, 4 meses
Puntos: 11
Sonrisa Busqueda en un ARREGLO

Hola mis amiguis, gusto saludarles nuevamente. He creado un arreglo con algunos datos de la base de datos y funciona correctamente. Antes yo realizaba la búsqueda de un dato especifico directamente en la base de datos, pero ahora quiero hacer la búsqueda de un dato especifico en un campo especifico pero no sé cual comando usar. Estoy confundida entre "array_search" y "in_array". Lo que quiero es verificar (por ejemplo) si existe el número de cédula "123456789" en el campo "cedula"

Mi arreglo es:
Código PHP:
... 
$clientes[$data['id']] = array(
        
'id' => $data['id'],
        
'nombre' => $data['nombre'],
        
'cedula' => $data['cedula'],
        
'email' => $data['email'],
        
'img' => $data['img'],
        
'sexo' => $data['sexo'],
        
'direccion' => $data['direccion']
      )... 
Mis opciones de búsqueda son:
Código PHP:
if (in_array("123456789"$clientes)) {...}
o
if (array_search("123456789"$clientes)) {...} 
qué comando debo utilizar?
Agradecida desde ya con quien me pueda ayudar
  #2 (permalink)  
Antiguo 21/05/2017, 21:56
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Busqueda en un ARREGLO

Ninguna de la dos, las funciones que menciones no son recursivas así que no puedes utilizarlas por si mismas para buscar en un arreglo de más de un nivel.

Te dejare una solución usando la función array_filter.
Código PHP:
Ver original
  1. $clientes = [
  2.  
  3.     1 => [
  4.         'id' => 1,
  5.         'nombre' => 'Juna Jose',
  6.         'cedula' => 123456,
  7.         'email' => '[email protected]',
  8.         'img' => 'jj.jpg',
  9.         'sexo' => 'm',
  10.         'dirección' => 'alguna dirección',
  11.     ],
  12.    
  13.     2 => [
  14.         'id' => 2,
  15.         'nombre' => 'Armando Bravo',
  16.         'cedula' => 789123,
  17.         'email' => '[email protected]',
  18.         'img' => 'ab.jpg',
  19.         'sexo' => 'm',
  20.         'dirección' => 'alguna dirección',
  21.     ],
  22.    
  23.     3 => [
  24.         'id' => 3,
  25.         'nombre' => 'Alicia Fuentes',
  26.         'cedula' => 731945,
  27.         'email' => '[email protected]',
  28.         'img' => 'af.jpg',
  29.         'sexo' => 'f',
  30.         'dirección' => 'alguna dirección',
  31.     ],
  32.    
  33. ];
  34.  
  35.  
  36. function value_exist($search, $array) {
  37.  
  38.     $callback = function($item) use (&$callback, $search) {
  39.         if (is_array($item)) {
  40.             return array_filter($item, $callback);
  41.         }
  42.    
  43.         return $item == $search;
  44.     };
  45.  
  46.    
  47.     return !empty(array_filter($array, $callback));
  48.    
  49. }
  50.  
  51. if (value_exist(124578, $clientes)) {
  52.     echo 'Existe cedula';
  53. } else {
  54.     echo 'no existe cedula';
  55. }

Otras formas de hacerlo es recorrer el arreglo con un foreach.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 25/05/2017, 10:21
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 9 años, 4 meses
Puntos: 11
Respuesta: Busqueda en un ARREGLO

Cita:
Iniciado por hhs Ver Mensaje
Te dejare una solución usando la función array_filter.
Código PHP:
Ver original
  1. $clientes = [
  2.  
  3.     1 => [
  4.         'id' => 1,
  5.         'nombre' => 123456,
  6.         'cedula' => 'Juna Jose',
  7.         'email' => '[email protected]',
  8.         'img' => 'jj.jpg',
  9.         'sexo' => 'm',
  10.         'dirección' => 'alguna dirección',
  11.     ],
  12.   .
  13.   .
  14.   .

Hola hhs, me funciona bien el código que compartes, pero este hace una búsqueda por todos los campos del arreglo y necesito que se haga por un campo especifico. Imaginate que la persona se equivoco al hacer el arreglo (el cual porsupuesto viene de una DB) y escribio la cedula en el campo del nombre y viceversa.
Al ejecutar el código me sigue devolviendo TRUE ya que hace la búsqueda en todos los "campos". Te pregunto: cómo podría hacer para forzar a buscar el valor en un "campo" específico ?

Última edición por julia2021; 25/05/2017 a las 10:40
  #4 (permalink)  
Antiguo 25/05/2017, 13:41
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: Busqueda en un ARREGLO

Utiliza un foreach como te recomendaron:
Código PHP:
Ver original
  1. foreach ($clientes as $key => $value) {
  2.     if($value['cedula']==$valor){
  3.         //Cualquier cosa;
  4.         break;
  5.     }
  6. }
__________________
[email protected]
HITCEL
  #5 (permalink)  
Antiguo 25/05/2017, 13:52
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 9 años, 4 meses
Puntos: 11
Respuesta: Busqueda en un ARREGLO

Hola xfxstudios, me funciono perfectamente, Agradecida por tu ayuda, pero ahora te quiero preguntar, no existe algún comando para hacer dicha búsqueda de manera más directa en el arreglo sin necesidad de someter todo el arreglo a un bucle foreach ?
Por ejemplo:
Código:
$cedula = array_search('123456789',$clientes[cedula]);
o
$cedula = in_array('123456789',$clientes[cedula]);
Sé que estan malas estas líneas, pero es para explicar un poco lo que estoy buscando.
Besos !

Última edición por julia2021; 25/05/2017 a las 14:06
  #6 (permalink)  
Antiguo 25/05/2017, 14:07
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: Busqueda en un ARREGLO

Cita:
Iniciado por julia2021 Ver Mensaje
Hola xfxstudios, me funciono perfectamente, Agradecida por tu ayuda, pero ahora te quiero preguntar, no existe algún comando para hacer dicha búsqueda de manera más directa en el arreglo sin necesidad de someter todo el arreglo a un bucle foreach ?
Podrias Probar algo asi:
Código PHP:
Ver original
  1. $resultado = array_search('123456', array_column($clientes, 'cedula'));

ó
Código PHP:
Ver original
  1. $cedulas = array_column($clientes,'cedula');
  2. $buscar = array_search('123456',$cedulas);

No lo he probado, pero debería de funcionarte
__________________
[email protected]
HITCEL
  #7 (permalink)  
Antiguo 01/06/2017, 11:00
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 9 años, 4 meses
Puntos: 11
Respuesta: Busqueda en un ARREGLO

Me funciono perfecto amigo, Mil gracias

Etiquetas: arreglo, busqueda
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 12:49.