Foros del Web » Programando para Internet » PHP »

Arrays

Estas en el tema de Arrays en el foro de PHP en Foros del Web. Hola, me surgio una duda, no se si es posible. Si tengo este array: Código PHP: $arr [ 0 ]= "cero" ; $arr [ 1 ...
  #1 (permalink)  
Antiguo 02/05/2011, 04:03
 
Fecha de Ingreso: diciembre-2009
Mensajes: 186
Antigüedad: 14 años, 4 meses
Puntos: 5
Arrays

Hola,

me surgio una duda, no se si es posible.

Si tengo este array:

Código PHP:
$arr[0]="cero";
$arr[1]="uno";
$arr[2]="dos"
E intento visualizarlo de la siguiente forma:

Código PHP:
echo "$arr[0]";

// el resultado es: cero 
Ahora bien si tengo el siguiente array:

Código PHP:
$arr[0]["uno"]="01";
$arr[0]["dos"]="02";
$arr[0]["tres"]="03";
$arr[1]["uno"]="11";
$arr[1]["dos"]="12";
$arr[1]["tres"]="13"
La instruccion utilizada para el array anterior no funciona

Código PHP:
echo "$arr[0]['dos']";

// el resultado es: Array['dos'] 
¿Hay alguna forma de ir directanemte a un valor de un array sin tener que recorrerlo hasta dar con el si sabes de antemano los indices de las distintas dimensiones, y sabiendo que el número de divensiones puede variar?

Última edición por DarkWater; 02/05/2011 a las 04:16
  #2 (permalink)  
Antiguo 02/05/2011, 04:50
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años
Puntos: 3
Respuesta: Arrays

Llamando a la dimensión de la que se quiere sacar el valor requerido, tal y como se ha definido, con sus comillas simples, y sin ponerlo dentro de comillas dobles, te debería salir. Es decir:

en vez de
Cita:
echo "$arr[0]['dos']";
poner
Cita:
echo $arr[0]["dos"];
__________________
Saludos,

zacktagnan.
=================================================
  #3 (permalink)  
Antiguo 02/05/2011, 04:58
 
Fecha de Ingreso: diciembre-2009
Mensajes: 186
Antigüedad: 14 años, 4 meses
Puntos: 5
Respuesta: Arrays

Hola, gracias por responder

de esta forma ya se que se puede hacer, pero en mi caso no sabría ni el número ni el indice de las dimensiones por lo que necesito que parte de los indices sea variable.
  #4 (permalink)  
Antiguo 02/05/2011, 05:37
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años
Puntos: 3
Respuesta: Arrays

Bueno, los índices de fila y columna, si no entiendo mal, te vendría por REQUEST o través de un resultado de un SELECT, o algo parecido, ¿no?

Entonces, los valores los metes en variables y luego estableces esas variables como índices para llamar a la dimensión deseada del array requerido. De esta forma:

Código PHP:
$indice_fila    1;
$indice_columna 'uno';

echo 
$arr[$indice_fila][$indice_columna];

// Esto según lo definido en tu array, debería mostar el valor de [B]11[/B] 
¿Es esto lo que quieres?
__________________
Saludos,

zacktagnan.
=================================================
  #5 (permalink)  
Antiguo 02/05/2011, 05:59
 
Fecha de Ingreso: diciembre-2009
Mensajes: 186
Antigüedad: 14 años, 4 meses
Puntos: 5
Respuesta: Arrays

Hola,

me explico mas claro y con código:

He conseguido crear la siquiente funcion que hace lo que yo necesito pero usando eval():

Código PHP:
public static function setIndiceAtrubuto($array,$indices)
    {
        
$retorno=array();
        
$array_cad='[\''.implode("']['",$indices).'\']';
        
        foreach(
$array as $key => $val)
        {
            
$indice=eval('return $val'.$array_cad.';');
            
$retorno[$indice]=$array[$key];
        }
        
        return 
$retorno;
    } 
Como verás, necesito una función a la que se le pase un array, este array tiene que ser bidimensional y contiene los atributos de una consulta a la base de datos con el siguiente formato:

Código PHP:
$arr[0]["atrib1"]
$arr[0]["atrib2"]
$arr[0]["atrib3"]

$arr[1]["atrib1"]
$arr[1]["atrib2"]
$arr[1]["atrib3"]

....

$arr[n]["atrib1"]
$arr[n]["atrib2"]
$arr[n]["atrib3"
Pasados los datos a la funcion esta tiene que devolver un array con el indice pasado como primera dimension:

EJ:

pasamos el siguiente array

Código PHP:
$arr[0]["atrib1"];
$arr[0]["atrib2"];
$arr[0]["atrib3"];

$arr[1]["atrib1"];
$arr[1]["atrib2"];
$arr[1]["atrib3"];

$arr[2]["atrib1"];
$arr[2]["atrib2"];
$arr[2]["atrib3"];

setIndiceAtrubuto($arr,array("atrib2")); 
tendria que devolver:

Código PHP:
$arr["atrib1"]["atrib1"];
$arr["atrib1"]["atrib2"];
$arr["atrib1"]["atrib3"];

$arr["atrib1"]["atrib1"];
$arr["atrib1"]["atrib2"];
$arr["atrib1"]["atrib3"];

$arr["atrib1"]["atrib1"];
$arr["atrib1"]["atrib2"];
$arr["atrib1"]["atrib3"]; 
  #6 (permalink)  
Antiguo 02/05/2011, 06:40
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años
Puntos: 3
Respuesta: Arrays

Lo siento pero no llego a comprender del todo por qué haces lo que haces y cuál es su objetivo final

Por ejemplo, en la función esa que has creado en la línea:

Código PHP:
$indice=eval('return $val'.$array_cad.';'); 
terminas poniendo el valor recogido en la dimensión recorrida como nuevo indice del array retorno que se devuelve y poniéndole como valor el array en esa dimensión de $key

Haciendo un pequeño ejemplo, si tenemos:

Código PHP:
$arr[0]["atrib1"] = '01';
$arr[0]["atrib2"] = '02';
$arr[0]["atrib3"] = '03';

$arr[1]["atrib1"] = '11';
$arr[1]["atrib2"] = '12';
$arr[1]["atrib3"] = '13';

$arr[2]["atrib1"] = '21';
$arr[2]["atrib2"] = '22';
$arr[2]["atrib3"] = '23';

// Llamamos a la función
$arr_retornado setIndiceAtrubuto($arr, array("atrib2"));

// Ahora se recorre el array devuelto
foreach ( $arr_retornado as $k => $v ) {
    echo 
'<br />- en el índice ['.$k.'] => el valor es de '.$v;
    foreach ( 
$v as $vk => $vv ) {
        echo 
'<br />'."&nbsp;&nbsp;&nbsp;&nbsp;".'- en el índice ['.$vk.'] => el valor es de '.$vv;
    }
}

// Esto da por pantalla: 
Código HTML:
- en el índice [02] => el valor es de Array
    - en el índice [atrib1] => el valor es de 01
    - en el índice [atrib2] => el valor es de 02
    - en el índice [atrib3] => el valor es de 03
- en el índice [12] => el valor es de Array
    - en el índice [atrib1] => el valor es de 11
    - en el índice [atrib2] => el valor es de 12
    - en el índice [atrib3] => el valor es de 13
- en el índice [22] => el valor es de Array
    - en el índice [atrib1] => el valor es de 21
    - en el índice [atrib2] => el valor es de 22
    - en el índice [atrib3] => el valor es de 23
Y no llego a comprender el propósito, no sé ...
__________________
Saludos,

zacktagnan.
=================================================
  #7 (permalink)  
Antiguo 03/05/2011, 03:21
 
Fecha de Ingreso: diciembre-2009
Mensajes: 186
Antigüedad: 14 años, 4 meses
Puntos: 5
Respuesta: Arrays

Al final me voy a quedar con el último ejemplo que me diste, queria hacer una funcion un poco más general para mas dimensiones, pero de momento con esta me vale.

Gracias.

Etiquetas: arrays
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:35.