Foros del Web » Programando para Internet » PHP »

Cadenas PHP

Estas en el tema de Cadenas PHP en el foro de PHP en Foros del Web. Hola a todos, tengo el siguiente problema: 1. Obtengo una cadena por POST. Por ejemplo : 125+487*85/2 2. Quiero recorrer la cadena pasar cada número ...
  #1 (permalink)  
Antiguo 18/03/2019, 15:03
 
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 127
Antigüedad: 11 años, 7 meses
Puntos: 0
Busqueda Cadenas PHP

Hola a todos, tengo el siguiente problema:

1. Obtengo una cadena por POST. Por ejemplo : 125+487*85/2
2. Quiero recorrer la cadena pasar cada número (125) (487) (85) (2) en una variable independiente, al igual que cada operador que haya en la cadena (+) (*) (/)
3 Para finalmente resolver la operación según el orden (De izquierda a derecha)


Espero puedan ayudarme.


Saludos.
  #2 (permalink)  
Antiguo 18/03/2019, 18:08
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 6 años, 2 meses
Puntos: 379
Respuesta: Cadenas PHP

Esto es algo que puedes resolver con arboles binarios, te dejo un articulo que te ayudara con el tema https://www.geeksforgeeks.org/expression-tree/
https://www.geeksforgeeks.org/arithm...ion-evalution/

Tambien puedes buscar librerias que ya hacen lo que requieres.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 24/03/2019, 19:47
 
Fecha de Ingreso: abril-2006
Mensajes: 291
Antigüedad: 13 años, 4 meses
Puntos: 52
Respuesta: Cadenas PHP

Cita:
Iniciado por Calle7 Ver Mensaje
Hola a todos, tengo el siguiente problema:

1. Obtengo una cadena por POST. Por ejemplo : 125+487*85/2
2. Quiero recorrer la cadena pasar cada número (125) (487) (85) (2) en una variable independiente, al igual que cada operador que haya en la cadena (+) (*) (/)
3 Para finalmente resolver la operación según el orden (De izquierda a derecha)


Espero puedan ayudarme.


Saludos.
parsea la cadena y descomponela, para ello existe la funcion de php, para tokenizar,string,
http://es.php.net/manual/es/function.token-get-all.php

con ello te retonar un array , con cada componente, si son ENtero flotante, string, parentesis, etc , en fin es una funcion muy poderosa,

con lo cual no importa si ingresan

Código PHP:
1*2+349 
o
Código PHP:
1     * .    .     +     349 
si ignoras los espacios podras realizar lo que quieras
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.me/pools/c/87BTML2gwr
  #4 (permalink)  
Antiguo 24/03/2019, 23:41
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 4 años, 2 meses
Puntos: 263
Respuesta: Cadenas PHP

y su evaluas el contenido de la operación, de esta manera:

Código HTML:
Ver original
  1. $cadena = "125+487*85/2";
  2. eval("\$var = $cadena;");
  3. echo $var;
  4.  
  5. //retorna: 20822.5
__________________
[email protected]
HITCEL
  #5 (permalink)  
Antiguo 24/03/2019, 23:59
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 4 años, 2 meses
Puntos: 263
Respuesta: Cadenas PHP

Tambien esta el lado largo que es lo que buscas creo, en ese caso se me ocurre algo así:

Código PHP:
Ver original
  1. //Cadena que llega
  2. $cadena = "125+487*85/2";
  3. //Array de Salida
  4. $salida = [];
  5. //Simbolos
  6. $simbolos = ['+','/','*','-'];
  7. //Descomponemos la cadena entrante
  8. $can = str_split($cadena);
  9. //Grupo Temporal
  10. $temp = "";
  11.  
  12. //Recorremos el array resultante del string
  13. for($i=0; $i<count($can); $i++){
  14.     //Si no es un simbolo lo agregamos a la variable temp
  15.     if(!in_array($can[$i],$simbolos)){
  16.         $temp .= $can[$i];
  17.     }else{
  18.         //si es un simbolo agregamos los elementos al array de salida
  19.         array_push($salida, $temp);
  20.         array_push($salida, $can[$i]);
  21.         $temp = "";
  22.     }
  23.     //Si llegamos al final de recorrido y la variable temp esta llena la agregamos al array de salida
  24.     if($i+1==count($can) && $temp !=""){
  25.         array_push($salida,$temp);
  26.     }
  27. };
  28.  
  29. var_dump($salida);

eso retorna el siguiente array:

array(7) {
[0]=> string(3) "125"
[1]=> string(1) "+"
[2]=> string(3) "487"
[3]=> string(1) "*"
[4]=> string(2) "85"
[5]=> string(1) "/"
[6]=> string(1) "2"
}

claro debe haber una manera más simple, pero es la que se me ocurre a esta hora.
__________________
[email protected]
HITCEL



La zona horaria es GMT -6. Ahora son las 08:24.