Foros del Web » Programando para Internet » PHP »

sacar valores de un arreglo

Estas en el tema de sacar valores de un arreglo en el foro de PHP en Foros del Web. como puedo sacar los valores de un arreglo a otro sin perder las claves ni los indices ; de la forma normal no puede ser ...
  #1 (permalink)  
Antiguo 22/03/2004, 14:49
 
Fecha de Ingreso: marzo-2004
Mensajes: 40
Antigüedad: 20 años, 8 meses
Puntos: 0
sacar valores de un arreglo

como puedo sacar los valores de un arreglo a otro sin perder las

claves ni los indices ;


de la forma normal no puede ser

arreglo2 = arreglo1 ;


porque despues no lo puedo usar..

si alguien sabe me lo puede decir ok..
  #2 (permalink)  
Antiguo 22/03/2004, 15:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Seguro que no se puede?

Código PHP:
<?php

$array1
=array("indice1"=>"valor1","indice2"=>"valor2","indice3"=>"valor3");

$array2=$array1;

print_r($array2);
?>


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 22/03/2004, 15:31
 
Fecha de Ingreso: marzo-2004
Mensajes: 40
Antigüedad: 20 años, 8 meses
Puntos: 0
esta bien lo que dices tu pero no me lo reconoce como un arreglo o solamente me imprime el primer indice con sus valores;




lo que pasa es que el arreglo lo recibo de una funcion

externa y no se los valores del arreglo, conosco los indices

solamente.


necesito una funcion para sacar los valores con sus indices

utilizando un ciclo ya que pueden ser muchos registros


disculpen las molestias pero no tiene algun metodo por ahi.
  #4 (permalink)  
Antiguo 22/03/2004, 15:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Si no pones el código que usas para representar/leer ese arreglo nuca veremos que problema tienes concretamente ...

Los arreglos los puedes recorrer con bucles foreach() que son los que mejor van para arreglos (asociativos como el ejemplo del array que puse o no ..)

Código PHP:
foreach($array2 as $indice => $valor){
    echo 
$indice." => ".$valor."<br>";

Tambien podrías usar each() con list() .. o bucles for() clasícos contanto los elementos con count() .. Pero el más cómodo (dependiendo del caso) es usar un bucle foreach() y olvidarse de contar elementos del array .. o liarse con el each() y el list() ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 22/03/2004, 15:44
 
Fecha de Ingreso: marzo-2004
Mensajes: 40
Antigüedad: 20 años, 8 meses
Puntos: 0
este es mi problema original, trate de separarlo pero veo que necesitas todo el codigo ..

yo traigo el arreglo de mysql lo paso a clientes y de ahi lo paso a el codigo php el que va a generar el template, el problema es que al enviarlo al loop del template me manda el error variable pasada al each no es un objeto;

pero si yo genero un arreglo en el codigo este funciona perfecto;

entonces lo que necesito es recoger el arreglo y pasarlo a otro arreglo o que alguien me indique como usar correctamente template .



este es el php que utiliza el template y la clase que yo cree"Clientes.php"

<?php

include('class.template.inc');
require('Clientes.php');

$test_var = 'Hello world!';
$page_title = 'Template Class';


$a = new Clientes();


$arreglo = array();

$arreglo = $a->obtiene_datos(); => aqui yo creo que

esta el error : me da el siguiente error : variable pasada al each () no es un arreglo ;


debe ser al each que utiliza el template class;


$tpl = new template;
$tpl->load_file('complete', 'pagina.html');
$tpl->parse_loop('complete', 'arreglo');
$tpl->pprint('complete', array('test_var','page_title'));

?>




esta es la clase cliente que yo cree.


<?php

class Clientes {

var $id_cliente ;

var $record = array();


// constructor

function Clientes() {
}


// funcion que llamo desde el php


function obtiene_datos(){

require ("class.mysql.php"); => clase mysql funciona ok.

$miconexion = new DB("","","");

$miconexion->query("SELECT * FROM clientes");

return $miconexion->fetchRow();

}

}

?>



este es el template, de aqui lo baje

http://mediate.mirrors.phpclasses.o...package/54.html



y la clase mysql que hace referencia Cliente la baje de la misma pagina


pero todo esto funciona bien




y aqui esta el html por si acaso




<HEAD>
<TITLE>{page_title}</TITLE>
</HEAD>
<BODY>


<P ALIGN="CENTER">{test_var}</P>

<TABLE BORDER="0" BGCOLOR="#000000" STYLE="background-color: #000000; font-family: monospace; font-size: 10pt" CELLSPACING="1" ALIGN="CENTER">
<TR>
<TH BGCOLOR="#DDDDDD">Nombres de Clientes</TH>
<TH BGCOLOR="#DDDDDD">apellidos</TH>
<TH BGCOLOR="#DDDDDD">Id</TH>
<TH BGCOLOR="#DDDDDD">sexo</TH>
<TH BGCOLOR="#DDDDDD">coreo</TH>

</TR>

<LOOP NAME="arreglo">
<TR>
<TD BGCOLOR="#DDDDDD">{nombres}</TD>
<TD BGCOLOR="#DDDDDD">{apellidos}</TD>


</TR>
</LOOP NAME="arreglo">


</TABLE>




</BODY>
</HTML>
  #6 (permalink)  
Antiguo 22/03/2004, 15:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Sigue faltanto el código de:
class.mysql.php

por qué ahí se verá que hace exactamente el método:
fetchRow()

Un saludo,

PD: .. no sé si cerrar el otro tema que tienes abierto .. pero por favor continua los temas en su mensaje incial .. Tal vez ahora que estoy preguntando yo esto aquí .. por otro lado otra persona lo está preguntando también ..
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 22/03/2004 a las 15:52
  #7 (permalink)  
Antiguo 22/03/2004, 15:58
 
Fecha de Ingreso: marzo-2004
Mensajes: 40
Antigüedad: 20 años, 8 meses
Puntos: 0
record es un arreglo

var $record = array(); esta declarado al principio

pero no te preocupes del mysql por que funciona correcto


function fetchRow()
{
if (isset($this->queryid)) {
$this->previd++;
return $this->record = @mysql_fetch_array($this->queryid);
} else {
$this->return_error('Query no especificado.');
}

pero no te preocupes del mysql por que funciona correcto ..

pero este no es el punto .. ya que el arreglo lo recibo en el codigo php y si lo imprimo con un foreach funciona, bien eso quiere decir que esta lleno el arreglo..


pero al pasarlo al loop del templates me da el error de que no es un arreglo , por eso necesito desarmarlo y pasarlo a otro arreglo en el mismo codigo php para que el templates me lo reconosca como un arreglo..


por lo menos es lo que se me ocurre .. si sabes otra forma mas facil me la podrias dar.

lo que pasa es que estoy creando varias clases para un programa muy grande que necesito hacer y tengo que ocupar las clases de esa manera no tengo otra forma..
  #8 (permalink)  
Antiguo 22/03/2004, 16:25
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Conoces como funciona mysql_fecht_array() ? ..

Bueno .. esas funciones te devuelven el primer registro de un recordset al ser llamado y mueven el puntero interno de la consulta una posición hacia adelante .. Al llegar al último registro de ese recordset obtenido por tu mysql_query() (tu $this->queryid) .. devuelve la función un "false" ... Tenlo presente.

La consulta que ejecutas:
SELECT * FROM clientes

puede arrojar de 0 a N registros (en el recordset) .. Con tu llamada a tu función sólo obtienes el primero .. como instancias tu objeto en la función obtiene_datos() no vas a poder ejecutar esa función en un bucle para obtener más registros arrojados por ese recordset (siempre te devolverá el primero por qué siempre instancias el objeto) ...

Podrías crearte un nuevo método (si no lo usas ya) que te genere un array bidimensional usando un bucle while ($registro=mysql_fecht_array($recorset)) ..

Y tu método fechRow .. tal vez te venga mejor usar mysql_fetch_row() en lugar del _fetch_array() ...


Aparte de esto.. dices que usas un "each" pero no veo el código completo que usas ... Se hace complicado ver "porciones" de código que más encima son classes (objetos) .. Yo ya empiezo a "perderme" sin poder probarlo. Revisa los puntos que te menciono y usa print_r() a tu supesta variable que no te entrega el valor que esperas .. revisa si tu consulta SQL se ejecuta y si arroja los registros esperados .. etc ..


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 22/03/2004, 16:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
A todo esto ...

$tpl->parse_loop('complete', 'arreglo');

¿no será? (no he revisado la documentación del motor de templates que usas .. pero de alguna forma hay que indicarle la variable que usará?):

$tpl->parse_loop('complete', $arreglo);

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 21:29.