Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Extraer o copiar elementos de una posicion determinada

Estas en el tema de Extraer o copiar elementos de una posicion determinada en el foro de PHP en Foros del Web. tengo un array con los siguentes elementos; $arreglomezclado = array("manzana","silla","argentina","pera","mesa", "brasil","melon","mantel","peru"); Quiero dejarlo asi; $miarreglo["frutas"] y que aqui valla los elementos manzana, pera, melon $miarreglo["mueble"] ...
  #1 (permalink)  
Antiguo 24/06/2014, 20:47
 
Fecha de Ingreso: octubre-2006
Mensajes: 227
Antigüedad: 17 años, 5 meses
Puntos: 3
Pregunta Extraer o copiar elementos de una posicion determinada

tengo un array con los siguentes elementos;

$arreglomezclado = array("manzana","silla","argentina","pera","mesa", "brasil","melon","mantel","peru");

Quiero dejarlo asi;
$miarreglo["frutas"] y que aqui valla los elementos manzana, pera, melon
$miarreglo["mueble"] y que aqui valla los elementos silla, mesa, mantel
$miarreglo["pais"] y que aqui valla los elementos argentina, brasil, peru

Esto es dinamico, ahora hay repeticiones pero pueden haber una o mas de 3, es decir, tambien podria venir

array("manzana","silla","argentina","pera","mesa", "brasil","melon","mantel","peru", "uva", "sillon", "colombia");
  #2 (permalink)  
Antiguo 24/06/2014, 21:00
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Extraer o copiar elementos de una posicion determinada

Código PHP:
Ver original
  1. $paises = ['argentina','brasil','peru','usa','colombia','japon'];
  2. $frutas = ['guanabana','patilla','papaya','pera','manzana','melon'];
  3. $objetos = ['silla','mantel','destornillador'];
  4.  
  5. $arreglomezclado = array("manzana","silla","argentina","argentina","manzana","pera","mesa", "brasil","melon","mantel","peru","argentina");
  6.  
  7. // copio el array en vez de alterarlo eliminando los repetidos
  8. $pajar = array_unique($arreglomezclado);
  9.  
  10. $found = [];
  11.  
  12. $found['paises'] = array_intersect($pajar,$paises);
  13. $found['frutas'] = array_intersect($pajar,$frutas);
  14. $found['objetos'] = array_intersect($pajar,$objetos);
  15.  
  16. var_dump($found);

Resultado:

Código PHP:
Array
(
    [
paises] => Array
        (
            [
2] => argentina
            
[5] => brasil
            
[8] => peru
        
)

    [
frutas] => Array
        (
            [
0] => manzana
            
[3] => pera
            
[6] => melon
        
)

    [
objetos] => Array
        (
            [
1] => silla
            
[7] => mantel
        
)


He usado la notacion [] en vez de array() ... podria o no funcionarte dependiendo de tu version de PHP

Ese codigo se puede generalizar mas:

Código PHP:
Ver original
  1. $arreglomezclado = array("manzana","silla","argentina","argentina","manzana","pera","mesa", "brasil","melon","mantel","peru","argentina");
  2.  
  3. $search = [];
  4. $search['paises'] = ['argentina','brasil','peru','usa','colombia','japon'];
  5. $search['frutas'] = ['guanabana','patilla','papaya','pera','manzana','melon'];
  6. $search['objetos']= ['silla','mantel','destornillador'];
  7.  
  8.  
  9. // copio el array en vez de alterarlo eliminando los repetidos
  10. $subject = array_unique($arreglomezclado);
  11.  
  12. $found = [];
  13. foreach ($search as $key => $arr)
  14.     $found[$key] = array_intersect($subject,$search[$key]);
  15.  
  16. var_dump($found);
__________________
Salu2!

Última edición por Italico76; 24/06/2014 a las 21:12
  #3 (permalink)  
Antiguo 24/06/2014, 21:35
 
Fecha de Ingreso: octubre-2006
Mensajes: 227
Antigüedad: 17 años, 5 meses
Puntos: 3
De acuerdo Respuesta: Extraer o copiar elementos de una posicion determinada

Muy bueno el script, pero yo recibo un string ordenado, en este caso de 3, apartir de ese string lo divido, pero queda ordenado, la primer pocision en el ejemplo siempre representa la fruta, mueble y pais.

Por ejemplo, el string que me mandan seria manzana;silla;argentina;pera;mesa;brasil;melon;man tel;peru
La cual yo la trasformo en un array con la funcion explode

En el caso del script con el que resuelves el problema no puedo hacerlo porque no me pasan un array con las frutas otro con los muebles y otro con el pais.

Ademas de quedar ordenado, ademas cada array final tiene que quedar con el mismo numero de elementos. En el caso propuesto por ti al final no cuadra el numero de elementos.

Muchas gracias y espero que hagas un intento mas
  #4 (permalink)  
Antiguo 24/06/2014, 21:56
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Extraer o copiar elementos de una posicion determinada

Cita:
Muchas gracias y espero que hagas un intento mas
Creo que el intento debieras hacerlo tu, eres el único que debería intentar resolver el problema, los demas solo deberíamos darte pistas.
(Lo que no quita que a veces estemos buenos y escribamos algo de codigo)

Si tus datos estan de 3 en 3... ¿De verdad no se te ocurre nada para resolverlo?

¿Has probado siquiera a recorrer el array? ¿O a partirlo cada 3 elementos? ¿Has leído el manual? porque aqui hay un ejemplo de lo que necesitas.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 24/06/2014 a las 22:05 Razón: Quitar codigo de ejemplo, esta en el manual.
  #5 (permalink)  
Antiguo 25/06/2014, 15:40
 
Fecha de Ingreso: octubre-2006
Mensajes: 227
Antigüedad: 17 años, 5 meses
Puntos: 3
Respuesta: Extraer o copiar elementos de una posicion determinada

Cita:
Iniciado por NSD Ver Mensaje
Creo que el intento debieras hacerlo tu, eres el único que debería intentar resolver el problema, los demas solo deberíamos darte pistas.
(Lo que no quita que a veces estemos buenos y escribamos algo de codigo)

Si tus datos estan de 3 en 3... ¿De verdad no se te ocurre nada para resolverlo?

¿Has probado siquiera a recorrer el array? ¿O a partirlo cada 3 elementos? ¿Has leído el manual? porque aqui hay un ejemplo de lo que necesitas.
No se te a ocurrido que si lo llevo intentando resolver mucho este problema. La funcion que diste, ya la vi antes de tu mensaje altivo y prejuicioso ,y no, no me sirve esa funcion.

Simple, si no quieres responder, hazlo más simple, no respondas.
  #6 (permalink)  
Antiguo 25/06/2014, 16:34
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Extraer o copiar elementos de una posicion determinada

creo que ya te an dado la solucion, pero intentemoslo una vez mas.

a ver si me aclaro. te llega un string que en tu caso es fruta,mueble,pais,...repite...

supongo que lo cortas con explode() y que te genera un array que cada 3 se repite y que la cantidad total de elementos del array siempre va a ser multipo de 3

lo que quieres es generar 3 array cada uno agrupando su tipo.

a ver si esto te puede valer.
Código PHP:
Ver original
  1. <?php
  2.  
  3. $string="manzana,silla,argentina,pera,mesa, brasil,melon,mantel,peru";
  4.  
  5. $arreglomezclado = explode("," , $string);  //cortamos la cadena
  6.  
  7. $array_de_tres = array_chunk($arreglomezclado , 3);  //cortamos el array en array de 3 en 3
  8.  
  9. //recorremos el array
  10. foreach( $array_de_tres as $v){
  11.     $fruta[]=$v[0];
  12.     $mueble[]=$v[1];
  13.     $pais[]=$v[2];
  14. }
  15.  
  16. print_r($fruta);
  17. print_r($mueble);
  18. print_r($pais);
  19. /* resultado  
  20.  
  21. Array ( [0] => manzana [1] => pera [2] => melon )
  22. Array ( [0] => silla [1] => mesa [2] => mantel )
  23. Array ( [0] => argentina [1] => brasil [2] => peru )
  24.  
  25.  
  26. */
  27. ?>

Solo tenias que leer y pensar un poco
para la proxima:

http://www.php.net//manual/es/ref.array.php

Última edición por xerifandtomas; 25/06/2014 a las 17:04
  #7 (permalink)  
Antiguo 25/06/2014, 17:04
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Extraer o copiar elementos de una posicion determinada

Cita:
No se te a ocurrido que si lo llevo intentando resolver mucho este problema.
Veo codigo en este post, pero ninguno tuyo, asi que no, no se me ocurre que es lo que intentaste, porque no lo veo y tu tampoco lo comunicas.

Cita:
La funcion que diste, ya la vi antes de tu mensaje altivo y prejuicioso ,y no, no me sirve esa funcion.
¿Seguro que no te sirve? creo que @xerifandtomas la usa para resolver el problema perfectamente. Es mas, si en vez del foreach usas array-column el problema se resuelve en 4 lineas.

Cita:
Simple, si no quieres responder, hazlo más simple, no respondas.
De nada, se siente bien darle ayuda a un completo desconocido de forma desinteresada y que te respondan asi.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #8 (permalink)  
Antiguo 25/06/2014, 17:12
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
De acuerdo Respuesta: Extraer o copiar elementos de una posicion determinada

Cita:
Iniciado por NSD Ver Mensaje
Veo codigo en este post, pero ninguno tuyo, asi que no, no se me ocurre que es lo que intentaste, porque no lo veo y tu tampoco lo comunicas.


¿Seguro que no te sirve? creo que @xerifandtomas la usa para resolver el problema perfectamente. Es mas, si en vez del foreach usas array-column el problema se resuelve en 4 lineas.


De nada, se siente bien darle ayuda a un completo desconocido de forma desinteresada y que te respondan asi.

Totalmente deacuerdo contigo.

Y gracias por lo de array-column , no lo habia pensado.
  #9 (permalink)  
Antiguo 26/06/2014, 07:09
 
Fecha de Ingreso: octubre-2006
Mensajes: 227
Antigüedad: 17 años, 5 meses
Puntos: 3
Respuesta: Extraer o copiar elementos de una posicion determinada

No alcance a ver tu respuesta asi que te escribo la forma en la que lo hice, mi idea era encontrar una funcion existente que lo hiciera en una linea;

Igualmente te agradeci el post de la respuesta.

Código PHP:
$string="manzana,silla,argentina,pera,mesa, brasil,melon,mantel,peru,sandia,florero,india";
$txtToArreglo explode(','$string);
for (
$i 0$i count($txtToArreglo); $i++) {
    
$miarreglo["fruta"][] = $txtToArreglo[$i];
    
$miarreglo["mueble"][] = $txtToArreglo[++$i];
    
$miarreglo["pais"][] = $txtToArreglo[++$i];
}
print_r($miarreglo["fruta"]);
print_r($miarreglo["mueble"]);
print_r($miarreglo["pais"]); 
NSD bajate de la nube, aun no eres moderador.

Etiquetas: elementos, posicion
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 13:08.