Foros del Web » Programando para Internet » PHP »

reto de arrays

Estas en el tema de reto de arrays en el foro de PHP en Foros del Web. Quiero hacer una consulta en un array multidimensional muy homogeneo. El ejemplo sería el siguiente Código: $milista = array ( 1 => array ("a" => ...
  #1 (permalink)  
Antiguo 20/08/2011, 19:11
 
Fecha de Ingreso: mayo-2007
Mensajes: 26
Antigüedad: 16 años, 10 meses
Puntos: 1
reto de arrays

Quiero hacer una consulta en un array multidimensional muy homogeneo.
El ejemplo sería el siguiente

Código:
$milista = array (
    1 => array ("a" => "cebolla asada", "b" => "valor_b1", "c" => "cebolla" ),
    2 => array ("a" => "guisado", "b" => "valor_b2", "c" => "zanahoria" ),
    3 => array ("a" => "ratatouille", "b" => "valor_b3", "c" => "cebolla" ),
    4 => array ("a" => "ensalada de cebolla", "b" => "valor_b4", "c" => "cebolla" ),
    5 => array ("a" => "dulce de boniato", "b" => "valor_b5", "c" => "boniato" )
}
Lo que quisiera hacer es que me devolviera un array con los números de elemento cuyo campo "c" dice cebolla:

array (1,3,4)

intentaría con array_key pero solo funciona con unidimensionales.

Saludos
  #2 (permalink)  
Antiguo 20/08/2011, 19:15
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: reto de arrays

Se me ocurre que recorras cada array y cheques si el índice C es igual a la palabra cebolla.

Saludos!

EDITO: Estuve experimentando y al parecer esa es buena opción, pruébalo
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #3 (permalink)  
Antiguo 20/08/2011, 19:32
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: reto de arrays

Nisiquiera hace falta recorrer cada array, con que recorras el array principal ya tienes tu resultado. Saludos
__________________
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
  #4 (permalink)  
Antiguo 20/08/2011, 19:39
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: reto de arrays

Ehp, es cierto, gracias por la observación :P
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #5 (permalink)  
Antiguo 20/08/2011, 20:10
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: reto de arrays

Código PHP:
Ver original
  1. <?php
  2. $milista = array (
  3.     1 => array ("a" => "cebolla asada", "b" => "valor_b1", "c" => "cebolla" ),
  4.     2 => array ("a" => "guisado", "b" => "valor_b2", "c" => "zanahoria" ),
  5.     3 => array ("a" => "ratatouille", "b" => "valor_b3", "c" => "cebolla" ),
  6.     4 => array ("a" => "ensalada de cebolla", "b" => "valor_b4", "c" => "cebolla" ),
  7.     5 => array ("a" => "dulce de boniato", "b" => "valor_b5", "c" => "boniato" ));
  8.  
  9. $resultado = array();
  10. foreach ($milista as $indice => $arrayInterno) {
  11.     list(,,$c) = array_values($arrayInterno);
  12.     if ($c == 'cebolla') {
  13.         $resultado[] = $indice;
  14.     }
  15. }
  16.  
  17. echo '<pre>';
  18. var_dump($resultado);
  19. echo '<pre/>';

Saludos
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #6 (permalink)  
Antiguo 20/08/2011, 20:26
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: reto de arrays

Sencillo hacer eso, ya que portalmana le hizo el trabajo coloco mi forma:

Código PHP:
Ver original
  1. $arr = array();
  2. for ($i = 1; $j = count($milista), $i < $j; $i ++) {
  3.     if ($milista[$i]['c'] == 'cebolla') {
  4.         $arr[] = $i;
  5.     }
  6. }
  7. echo implode(', ', $arr);
__________________
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 20/08/2011, 20:46
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: reto de arrays

Yo lo haría usando las funciones de PHP, algo como
Código PHP:
Ver original
  1. <?php
  2. $arr = array (
  3.     1 => array ("a" => "cebolla asada", "b" => "valor_b1", "c" => "cebolla" ),
  4.     2 => array ("a" => "guisado", "b" => "valor_b2", "c" => "zanahoria" ),
  5.     3 => array ("a" => "ratatouille", "b" => "valor_b3", "c" => "cebolla" ),
  6.     4 => array ("a" => "ensalada de cebolla", "b" => "valor_b4", "c" => "cebolla" ),
  7.     5 => array ("a" => "dulce de boniato", "b" => "valor_b5", "c" => "boniato" )
  8. );
  9. $keys = array();
  10. array_walk($arr, function($v,$k) use(&$keys){
  11.     if($v['c'] == 'cebolla'){
  12.         $keys[] = $k;
  13.     }
  14. });
  15. print_r($keys);
  16. /**
  17.  * Siempre es bueno hacer unset a las variables por referencia
  18.  */
  19. unset($keys);

Edito: Se me olvidaba indicar que esto es para PHP >= 5.3, para versiones menores debes usar create_function.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 20/08/2011 a las 20:53
  #8 (permalink)  
Antiguo 20/08/2011, 20:56
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: reto de arrays

En definitiva y sin complicar lo mas sencillo...
Código PHP:
Ver original
  1. $resultado = array();
  2. foreach ($milista as $indice => $arrayInterno) {
  3.     if ($arrayInterno['c'] == 'cebolla') {
  4.         $resultado[] = $indice;
  5.     }
  6. }
  7.  
  8. echo '<pre>';
  9. var_dump($resultado);
  10. echo '<pre/>';
Hazlo simple tan simple como sea posible, pero no más.
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp

Etiquetas: arrays, reto
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:05.