Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Modificar Array PHP

Estas en el tema de Modificar Array PHP en el foro de PHP en Foros del Web. Buenos dias a todos. Espero que me pueda expresar bien de manera que vosotros entiendan mi situación. Tengo el siguiente codigo php Este primer codigo ...
  #1 (permalink)  
Antiguo 24/02/2014, 11:14
 
Fecha de Ingreso: diciembre-2012
Mensajes: 11
Antigüedad: 11 años, 3 meses
Puntos: 0
Modificar Array PHP

Buenos dias a todos.

Espero que me pueda expresar bien de manera que vosotros entiendan mi situación.

Tengo el siguiente codigo php

Este primer codigo me sirve para tomar el valor de la etiqueta en el lenguaje del usuario.
function extracttag($namefile, $name)
{
$file1 = $namefile.".xml";
$file2 = $namefile.".xml";
if (file_exists($file1))
{
$newtag = simplexml_load_file($file1);
if ($newtag) {
foreach ($newtag->tag as $a) {
if ($a->tag_l == $name) {
return $a->translations;
}
}
return $a;
} else return "";
}
elseif (file_exists($file2))
{
$newtag = simplexml_load_file($file2);
if ($newtag) {
foreach ($newtag->tag as $a) {
if ($a->tag_l == $name) {
return $a->translations;
}
}
return $a;
} else return "";
} else
{
echo "Error_open_xml";
}
}

este segundo codigo me permite recorrer el array (realizado por http://www.tecnopedia.net/)

function recorro($matriz)
{
foreach($matriz as $key=>$value)
{
if (is_array($value))
{
//si es un array sigo recorriendo
recorro($value);
}else
{
//si es un elemento lo muestro

$tagvalue = extracttag($userlang, $value);
if ($tagvalue == ""){} else {$value = $tagvalue; echo $matriz[$key] == $value; } //con este IF lo que hago es verificar que el valor de la variable $value este dentro del archivo xml si no lo encuentra no pasa nada, en vez si se encuentra el valor dentro del archivo xml necesitaría cambiar el valor de la Key del array por el valor de la variable $tagvalue. esta es mi pregunta como hago para que este valor sea sustituido en el array en la posición donde se cumple la condición?.
}
}
}

gracias de antemano
  #2 (permalink)  
Antiguo 24/02/2014, 13:48
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 10 meses
Puntos: 127
Respuesta: Modificar Array PHP

creo que no hay respuestas por que no se entiende nada.
  #3 (permalink)  
Antiguo 24/02/2014, 22:26
 
Fecha de Ingreso: abril-2012
Mensajes: 88
Antigüedad: 12 años
Puntos: 1
Respuesta: Modificar Array PHP

Cita:
Iniciado por enlinea777 Ver Mensaje
creo que no hay respuestas por que no se entiende nada.
En realidad no se entiende nada!!!

Escribes de una posicion determinada por nosotros del valor dentro de un array, es decir no de una pocisión arbitraria que tome el array sino una posición que nosotros queremos darle. Esto podría ayudarte


$NewArray = array($lavariablequetienelaposición => #variablequetieneelelemento);


Si no sabes como extraer la posición del elemento de un array es con array_search. Si explicas mejor o pones el codigo entre etiquetas php se puede ayudar mejos... Saludos...
  #4 (permalink)  
Antiguo 25/02/2014, 07:04
 
Fecha de Ingreso: diciembre-2012
Mensajes: 11
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Modificar Array PHP

Buen Día, disculpen por no haberme hecho entender.

Tratare de explico mejor. tengo un array PHP que se llama form, este array es multidimensional este array es dinámico es decir, según la llamada a la base de dato va a tener información distinta.

Tenemos la exigencia que ciertos valores en este array dedan tener la traduccion a segun del usuario que se conecta con la aplicacion. por esto hice la funcion extracttag, que en realidad lo que hace es recibir el valor de la key que lee el foreach y lo busca en un archivo xml donde tengo la traducción del idioma del usuario.

la funcion recorro, recoore el array y lo que hice fue agregar un IF donde compruebo que el valor de la Key en el punto donde esta el foreach se encuentre en el archivo xml del lenguage del usuario si se encuentra entonce deberia cambiarme el valor en el array que el forearh me esta leyendo

aqui abajo el codigo
<?php
$userlang = //codigo script que busca en la base de datos la informacion del idioma del usuario…..
$form[0] = $base; //array php
$form[1] = $array1; //array php
$form[2] = $array2; //array php
function extracttag($namefile, $name)
{
$file1 = $namefile.\".xml\";
$file2 = $namefile.\".xml\";
if (file_exists($file1))
{
$newtag = simplexml_load_file($file1);
if ($newtag) {
foreach ($newtag->tag as $a) {
if ($a->tag_l == $name) {
return $a->translations;
}
}
return $a;
} else return \"\";
}
elseif (file_exists($file2))
{
$newtag = simplexml_load_file($file2);
if ($newtag) {
foreach ($newtag->tag as $a) {
if ($a->tag_l == $name) {
return $a->translations;
}
}
return $a;
} else return \"\";
} else
{
echo \"Error_open_xml\";
}
}
function recorro($matriz)
{
foreach($matriz as $key=>$value)
{
if (is_array($value))
{
//si es un array sigo recorriendo
recorro($value);
}else
{
//si es un elemento lo muestro
$tagvalue = extracttag($userlang, $value);
if ($tagvalue != \"\"){$value = $tagvalue; $matriz[$key] = $tagvalue; }
}
}return($matriz);
}
recorro($form);
echo \’<pre>\’; // Esto para que sea mas legible
var_dump($form);
echo \’</pre>\’;
  #5 (permalink)  
Antiguo 25/02/2014, 08:17
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 10 meses
Puntos: 127
Respuesta: Modificar Array PHP

usar Highlight ayuda a entenderr mas el codigo


aun asi con lo que descrives no entiendo??????


trate de revisar tu codigo pero esta mas enredado que la explicacion.



asi se ordena el codigo
Código PHP:
<?php
$userlang 
//codigo script que busca en la base de datos la informacion del idioma del usuario…..
$form[0] = $base//array php
$form[1] = $array1//array php
$form[2] = $array2//array php
function extracttag($namefile$name)
{
$file1 $namefile.".xml";
$file2 $namefile.".xml";
if (
file_exists($file1)){
    
$newtag simplexml_load_file($file1);
        if (
$newtag){
            foreach (
$newtag->tag as $a){
                if (
$a->tag_l == $name){
                    return 
$a->translations;
                }
            }
            return 
$a;
        }else{
             return 
"";
        }
    }elseif (
file_exists($file2)){
        
$newtag simplexml_load_file($file2);
        if (
$newtag) {
            foreach (
$newtag->tag as $a) {
                if (
$a->tag_l == $name) {
                    return 
$a->translations;
                }
            }
        return 
$a;
        }else{
             return 
"";
             }
    }else{
    echo 
"Error_open_xml";
    }
}

function 
recorro($matriz){
foreach(
$matriz as $key=>$value){
    if (
is_array($value)){
    
//si es un array sigo recorriendo
    
recorro($value);
    }else{
    
//si es un elemento lo muestro
    
$tagvalue extracttag($userlang$value);
    if (
$tagvalue != ""){
        
$value $tagvalue$matriz[$key] = $tagvalue
        }
    }
}
return(
$matriz);
}

$form=recorro($form);
echo 
"<pre>"// Esto para que sea mas legible
    
var_dump($form);
echo 
"</pre>";

Última edición por enlinea777; 25/02/2014 a las 08:25
  #6 (permalink)  
Antiguo 25/02/2014, 08:55
 
Fecha de Ingreso: diciembre-2012
Mensajes: 11
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Modificar Array PHP

Disculpa no habia visto el Highlight,

EL problema que tengo es que no logro cambiar el valor al array dentro la función recorro($matriz) cuando la condicion if ($tagvalue != "") se cumple.
  #7 (permalink)  
Antiguo 25/02/2014, 09:27
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 13 años, 7 meses
Puntos: 45
Respuesta: Modificar Array PHP

No entiendo muy bien el problema.

para ayudarle puede imprimir var_dump dentro de la funcion "recorro" para ver que valores está trayendo el arreglo y si lo esta almacenando en la variable matriz.

Otra opción es pasar la variable matriz por referencia.
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x
  #8 (permalink)  
Antiguo 25/02/2014, 09:41
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 10 meses
Puntos: 127
Respuesta: Modificar Array PHP

creo que con eso
Código PHP:
function recorro($matriz){
    
$NuevaMatriz=array();
    foreach(
$matriz as $key=>$value){
        if (
is_array($value)){
        
//si es un array sigo recorriendo
        
recorro($value);
        }else{
        
//si es un elemento lo muestro
        
$tagvalue extracttag($userlang$value);
        if (
$tagvalue != ""){
            
$value $tagvalue$matriz[$key] = $tagvalue
            
$NuevaMatriz[$key]=$value;
            }else{
                
$NuevaMatriz[$key]=$value;
                }
        }
    }
return(
$NuevaMatriz);

  #9 (permalink)  
Antiguo 25/02/2014, 10:21
 
Fecha de Ingreso: diciembre-2012
Mensajes: 11
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Modificar Array PHP

Cambie la función recorro por la tuya y el array queda vacío. cuando imprimo el array form con var_dump($form) me devuerlve

array(0) {
}
  #10 (permalink)  
Antiguo 27/02/2014, 11:58
 
Fecha de Ingreso: abril-2012
Mensajes: 88
Antigüedad: 12 años
Puntos: 1
Respuesta: Modificar Array PHP

Código PHP:
if (is_array($value)){
recorro($value);
}else{
$tagvalue extracttag($userlang$value);
if (
$tagvalue != "\"){
$value = $tagvalue; 
$matriz[$key] = $tagvalue; 
}

Primero $tagvalue vale lo mismo que $value, así que no entiendo para que creas otra variable, en segundo lugar cuando queremos comprobar que una variable no está vacía debes urlizar !empty. En el código esta totamemente sucio y evidente mente no va a funcionar.

Esta respuesta tambien no cuadra:

Código PHP:
 if ($tagvalue != ""){
            
$value $tagvalue$matriz[$key] = $tagvalue
            
$NuevaMatriz[$key]=$value;
            }else{
                
$NuevaMatriz[$key]=$value;
                }
        } 

Como puedes notar en esta solución $value tambien es igual a $tagvalue, y tras eso la invoca la variable value en el else cuando solo la creo para el if por lo que evidente mente el array no contendrá datos...
  #11 (permalink)  
Antiguo 28/02/2014, 04:07
 
Fecha de Ingreso: diciembre-2012
Mensajes: 11
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Modificar Array PHP

muchas gracias muchacho por sus aportes, hemos podido resolver el problema usando referencia en la funcion

function recorro(&$matriz) //--> he agregado el pasaje por referencia
{
foreach($matriz as $key=>$value)
{
if (is_array($value))
{
//si es un array sigo recorriendo
recorro($value);
$matriz[$key]=$value; //--> he agregado esta linea
}else
{
//si es un elemento lo muestro
$tagvalue = extracttag("en", $value);
if($tagvalue!="")
{
$matriz[$key]=$tagvalue;
}
}
}
}



recorro($form);
  #12 (permalink)  
Antiguo 28/02/2014, 04:08
 
Fecha de Ingreso: diciembre-2012
Mensajes: 11
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Modificar Array PHP

Disculpen no use el highlight

Código PHP:
Ver original
  1. function recorro(&$matriz) //--> he agregado el pasaje por referencia
  2.             {
  3.                 foreach($matriz as $key=>$value)
  4.                 {
  5.                     if (is_array($value))
  6.                     {
  7.                         //si es un array sigo recorriendo
  8.                         recorro($value);
  9.                         $matriz[$key]=$value; //--> he agregado esta linea
  10.                     }else
  11.                     {
  12.                         //si es un elemento lo muestro
  13.                         $tagvalue = extracttag("en", $value);
  14.                         if($tagvalue!="")
  15.                         {
  16.                         $matriz[$key]=$tagvalue;
  17.                         }
  18.                     }
  19.                 }
  20.             }
  21.                
  22.        
  23.        
  24.         recorro($form);

Etiquetas: modificar, variable
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 15:32.