[resuelto] foreach solo devuelve un valor? habiendo 20

Iniciado por venadHD, 19 Julio 2015, 01:03 AM

0 Miembros y 1 Visitante están viendo este tema.

venadHD

no entiendo bien, segun foreach es para cada valor de un array, la pagina me devuelve esto: Como tendria que hacer para que imprimiera todos los valores?

KEY: 0 , VALUE: 1
KEY: 1 , VALUE: yo no
KEY: 2 , VALUE: me scripteo
Numero de filas: 19


Codigo source:
Código (php) [Seleccionar]
<html>
<head>
<title>VeNaD PHP Testing</title>
</head>
<!-- CODIGOS PHP INIT -->
<?php
//Conexion a base de datos
$db = array();
$db['usuario'] = "root"$db['contra'] = ""$db['dbnombre'] = 'global'$db['host'] = 'localhost';
$dbConnect = new mysqli($db['host'], $db['usuario'], $db['contra'], $db['dbnombre']);
//Chequeo de conexion a base de datos
if ($dbConnect->connect_errno) {
if ($dbConnect->connect_error) {
print("ERROR DE CONEXION DE MYSQL: ".$dbConnect->connect_error);
die();
}
print("ERROR DE CONEXION DE MYSQL N: ".$dbConnect->connect_errno);
die();
}
//Getter de datos de la base de datos
$query $dbConnect->query("select * from {$db['dbnombre']}");
$numero_filas $query->num_rows;
$dbarray $query->fetch_array(MYSQLI_NUM);
$dbConnect->query("insert into global values(NULL,'uptime', '1')");
//tabla de datos
foreach ($dbarray as $key => $value) {
printf("KEY: %s , VALUE: %s <br>"$key$value);
}
?>

<!-- PAGINA UTIL -->
<body>
<?php
//getter de filas
print("Numero de filas: $numero_filas <br>");
?>

</body>
</html>
<?php $dbConnect->close(); ?>

DarK_FirefoX

Cuando haces:

Código (php) [Seleccionar]
$dbarray = $query->fetch_array(MYSQLI_NUM);

Obtienes por cada llamada a ese método (fetch_array()) 1 fila en forma de array donde los indices son numéricos y los valores del array son los valores en los campos. Puedo ver que tu tabla tiene tres columnas. Por eso te salen 3 valores.

Debes incluir eso en un array en un while, algo así como:

Código (php) [Seleccionar]
while($row= $query->fetch_array(MYSQLI_NUM))
{
 //Imprimes los valores de la fila $row
}


Nota: Yo, en vez de MYSQLI_NUM, utilizaría MYSQLI_ASSOC, y el array sería asociativo, donde los indices en vez de ser números serían los nombres de las columnas (campos de tu tabla), o simplemente en vez del método fetch_array(), utilizaría el método fetch_assoc()

Espero haberte ayudado! Cualquier cosa pregunta.

Salu2s

venadHD

Cita de: DarK_FirefoX en 19 Julio 2015, 03:20 AM
Cuando haces:

Código (php) [Seleccionar]
$dbarray = $query->fetch_array(MYSQLI_NUM);

Obtienes por cada llamada a ese método (fetch_array()) 1 fila en forma de array donde los indices son numéricos y los valores del array son los valores en los campos. Puedo ver que tu tabla tiene tres columnas. Por eso te salen 3 valores.

Debes incluir eso en un array en un while, algo así como:

Código (php) [Seleccionar]
while($row= $query->fetch_array(MYSQLI_NUM))
{
 //Imprimes los valores de la fila $row
}


Nota: Yo, en vez de MYSQLI_NUM, utilizaría MYSQLI_ASSOC, y el array sería asociativo, donde los indices en vez de ser números serían los nombres de las columnas (campos de tu tabla), o simplemente en vez del método fetch_array(), utilizaría el método fetch_assoc()

Espero haberte ayudado! Cualquier cosa pregunta.

Salu2s


Bien bien, puse MYSQLI_ASSOC y va mucho mejor, no tengo que andar contando las columnas xD

Por no hacer otro tema distinto a este y porque se ve muy profesional aqui a todos, esto es mas en referencia a funciones matematicas, tengo un numero con decimales, como podria reducirlo a numero absoluto? osea si tengo  96.551724137931, que simplemente ponga "96", pero no 97!, es decir que lo vuelva absoluto, pero no aproximar, nose si me explique

Código (php) [Seleccionar]
$values = 0;
$totalValues = -1;
while ($row = $query->fetch_array(MYSQLI_ASSOC)) {
$values++;
$totalValues = $totalValues + $row['value'];
}
$porcentaje = $totalValues/$values*100;
print("Numero de valores totales: $values >> Suma de todos $totalValues");
print("Uptime: $porcentaje %"); //Esto es lo que me da los decimales

MinusFour

Cita de: venadHD en 20 Julio 2015, 01:26 AM
Bien bien, puse MYSQLI_ASSOC y va mucho mejor, no tengo que andar contando las columnas xD

Por no hacer otro tema distinto a este y porque se ve muy profesional aqui a todos, esto es mas en referencia a funciones matematicas, tengo un numero con decimales, como podria reducirlo a numero absoluto? osea si tengo  96.551724137931, que simplemente ponga "96", pero no 97!, es decir que lo vuelva absoluto, pero no aproximar, nose si me explique

Código (php) [Seleccionar]
$values = 0;
$totalValues = -1;
while ($row = $query->fetch_array(MYSQLI_ASSOC)) {
$values++;
$totalValues = $totalValues + $row['value'];
}
$porcentaje = $totalValues/$values*100;
print("Numero de valores totales: $values >> Suma de todos $totalValues");
print("Uptime: $porcentaje %"); //Esto es lo que me da los decimales


Se sale fuera del tema pero ¿Estas pensando en truncar el numero? Tienes que usar floor.

http://php.net/manual/en/function.floor.php

venadHD

Muchas gracias a todos por la colaboracion a pesar de que ese ultimo era distinto del tema original :D