Foros del Web » Programando para Internet » PHP »

Error array_merge

Estas en el tema de Error array_merge en el foro de PHP en Foros del Web. Código PHP: function  get_config_values () {     global  $db ;      $config  = array();      $query  =  $db -> sql_query ( "SELECT * FROM config" );     while ( $result  =  $db ...
  #1 (permalink)  
Antiguo 11/02/2011, 09:50
Avatar de TheRD  
Fecha de Ingreso: junio-2009
Mensajes: 120
Antigüedad: 14 años, 10 meses
Puntos: 0
Pregunta Error array_merge

Código PHP:
function get_config_values()
{
    global 
$db;
    
$config = array();
    
$query $db->sql_query("SELECT * FROM config");
    while (
$result $db->fetchfield($query))
    {
        
$config array_merge($config, array(
            
$result['config_name'] => $result['config_value'],
        ));
    }
    return 
$config;

Si dentro del while pongo un echo o un print_r los valores salen perfectamente, pero cuando hago el array_merge para meterlos todos dentro de un solo array, nada, no sale absolutamente nada.
¿Alguna idea?
Todas las otras funciones funcionan, las he probado, es solo lo de dentro del while lo que tiene algún error.
  #2 (permalink)  
Antiguo 11/02/2011, 10:04
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
Respuesta: Error array_merge

no logro localizar el error del merge solo la coma (,) al final de $result['config_value'],
pero analizando un poco, creo que no necesitas el merge, intenta con esto a ver que tal
Código PHP:
Ver original
  1. function get_config_values(){
  2.     global $db;
  3.     $query = $db->sql_query("SELECT * FROM config");
  4.     $config = array();
  5.     while ($result = $db->fetchfield($query)){
  6.         $config = array($result['config_name'] => $result['config_value']);
  7.     }
  8.     return $config;
  9. }
saludos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #3 (permalink)  
Antiguo 11/02/2011, 10:08
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Error array_merge

lo que si no me queda claro, ¿es porque usar array_merge()?

cuando algo así será mejor...
Código PHP:
$config[$result['config_name']] = $result['config_value']; 
creo que deberías tener buenos argumentos para usar array_merge(), pero no los entiendo...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 11/02/2011, 10:30
Avatar de TheRD  
Fecha de Ingreso: junio-2009
Mensajes: 120
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Error array_merge

Cita:
Iniciado por eits Ver Mensaje
no logro localizar el error del merge solo la coma (,) al final de $result['config_value'],
pero analizando un poco, creo que no necesitas el merge, intenta con esto a ver que tal
Código PHP:
Ver original
  1. function get_config_values(){
  2.     global $db;
  3.     $query = $db->sql_query("SELECT * FROM config");
  4.     $config = array();
  5.     while ($result = $db->fetchfield($query)){
  6.         $config = array($result['config_name'] => $result['config_value']);
  7.     }
  8.     return $config;
  9. }
saludos.
Eso sobreescribe el array $config cada vez que pase el while. La idea es obtener todos los valores.

Cita:
Iniciado por pateketrueke Ver Mensaje
lo que si no me queda claro, ¿es porque usar array_merge()?

cuando algo así será mejor...
Código PHP:
$config[$result['config_name']] = $result['config_value']; 
creo que deberías tener buenos argumentos para usar array_merge(), pero no los entiendo...
Pues porque lo que necesito es tener el array $config para acceder a los valores desde su nombre más tarde sin necesidad de hacer una query para buscar el nombre.
  #5 (permalink)  
Antiguo 11/02/2011, 10:41
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
Respuesta: Error array_merge

lo que dices de esto
Código PHP:
Ver original
  1. $config = array($result['config_name'] => $result['config_value']);
no es cierto ya que agrega un indice cada vez, en el caso del amigo pateketrueque(es mejor su solución) solo será cierto si config_name tiene el mismo nombre, acuerdate que $config es un arreglo, y cada vez que haya un registro nuevo lo aumenta no lo sobreescribe y tanto como lo dije y como dice pateketrueque(es mejor su solución, insisto) son similares y puedes acceder por los nombre(solo que es mas directo con el de pateketrueke), pero recuerda que solo te servira mientras no termine de mostrarse la página.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #6 (permalink)  
Antiguo 11/02/2011, 10:52
Avatar de TheRD  
Fecha de Ingreso: junio-2009
Mensajes: 120
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Error array_merge

Código PHP:
Ver original
  1. Array ( [server_protocol] => http ) Array ( [server_domain] => localhost ) Array ( [server_path_to] => b ) Array ( [server_port] => 80 )

Sí reescribe la variable (ha imprimido un array por cada vez que ha recorrido el bucle, en lugar de ir sumándolos y que al final quede un array con todos los valores), pues el resultado final debería ser:

Código PHP:
Ver original
  1. Array ( [server_protocol] => http [server_domain] => localhost [server_path_to] => b [server_port] => 80 )

Y no solo uno de los valores, ergo, sí, se reescribe. Cuando pasas una variable por un bucle y le vas asignando un valor se va reescribiendo, no agregando.

He probado a hacer print_r($config) dentro del bucle while y hasta ahí tiene los valores. Una vez sale del while (misteriosamente) ya no los tiene.

Código PHP:
Ver original
  1. function get_config_values(){
  2.     global $db;
  3.     $query = $db->sql_query("SELECT * FROM bl_config");
  4.     $config = array();
  5.     while ($result = $db->fetchfield($query)) {
  6.         $config = array_merge((array)$config,array(
  7.             $result['config_name']  =>  $result['config_value'],
  8.         ));
  9.     }
  10.         print_r($config);
  11. }

No imprime nada.

Código PHP:
Ver original
  1. function get_config_values(){
  2.     global $db;
  3.     $query = $db->sql_query("SELECT * FROM bl_config");
  4.     $config = array();
  5.     while ($result = $db->fetchfield($query)) {
  6.         $config = array_merge((array)$config,array(
  7.             $result['config_name']  =>  $result['config_value'],
  8.         ));
  9.         print_r($config);
  10.     }
  11. }

Imprime: Array ( [server_protocol] => http ) Array ( [server_protocol] => http [server_domain] => localhost ) Array ( [server_protocol] => http [server_domain] => localhost [server_path_to] => b ) Array ( [server_protocol] => http [server_domain] => localhost [server_path_to] => b [server_port] => 80 )

El valor de $config cada vez que recorre el bucle. Al tener el array_merge, cada vez que lo recorre tiene más valores.
El caso es que no comprendo que si ahí los tiene, justo debajo, tras salir del while, $config esté vacío.
El código de paketetrueke funciona mejor, es menos código y sin el array_merge, pero el problema es el mismo, al salir del while, $config está vacío.
  #7 (permalink)  
Antiguo 11/02/2011, 11:04
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
Respuesta: Error array_merge

con lo que me dice, confirmo que no reescribe, sin embargo no voy a hacer polémica, con lo que yo te di crea un array con array asociativos es decir $config[0]['server_protocol'] contiene http, $config[1]['[server_domain'] contiene localhost, etc. por eso decia que el del compañero era mejor, con ese si puedes hacer la solicitud directa, para que veas que es cierto lo que te digo puedes hacer un var_dump($config);
saludos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #8 (permalink)  
Antiguo 11/02/2011, 11:06
Avatar de TheRD  
Fecha de Ingreso: junio-2009
Mensajes: 120
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Error array_merge

Vale, sí, tienes razón, sí reescribe, leí mal el resultado xD.
Creo que el problema ahora está en la database abstraction layer, porque ahí, añadiendo lo de paketetrueke no puede haber más errores.
Gracias de todas formas, miraré allí.

Etiquetas: array_merge
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 23:06.