adi-a2
(Adi Aj)
28 Październik 2012 15:57
#1
Witam,
Mam taki problem który wydawał się dość prosty. Otóż muszę podać wynik operacji matematycznej. W skrócie opiszę to tak:
<?php
$wartosc_1 = 5;
$wartosc_2 = 2;
$operacja = 2*1*4*3;
$wynik = $wartosc_1*$wartosc_2/$operacja;
echo $wynik;
?>
W zmiennej $wynik chcę otrzymać wynik operacji matematycznej 5*2/2*1*4*3.
Dla mnie poprawny wynik to 60 , a ciągle otrzymuje wynik 0,41.
Problem tkwi w tym, że on zamienia całe polecenie $operacja na jedną liczbę. Czy można to jakoś obejść?
Wasacz
(Wasacz)
28 Październik 2012 16:29
#2
Można, ale bardzo brzydką metodą, której nie powinieneś znać (eval).
Zamiast tego spróbuj sobie przeorganizować kod, np. rozdziel zmienną $operacja na dwie inne.
cinkibolek
(cinkibolek)
28 Październik 2012 16:38
#3
eval(), który wbrew krążącym opiniom bardzo się przydaje, zobacz to:
<?php
$wartosc_1 = 5;
$wartosc_2 = 2;
$operacja = "2*1*4*3";
$expression = "$wartosc_1*$wartosc_2/$operacja";
eval('$wynik = '.$expression.';');
echo $wynik;
?>
albo wstaw liczby ze zmiennej $operacje do tablicy i przeleć po niej pętlą wykonując operację mnożenie w niej.
adi-a2
(Adi Aj)
28 Październik 2012 18:13
#4
Dlaczego się nie zaleca jej używania?
Za mocno obciąża system czy jak?
cinkibolek
(cinkibolek)
28 Październik 2012 18:19
#5
Ze względu na security. eval() jest potencjalnie niebezpieczne.
adi-a2
(Adi Aj)
28 Październik 2012 19:30
#6
Już wszystko wiem Dzięki Wam za pomoc!
<?php
function calcString($string)
{
$liczba = create_function("", "return ({$string});" );
return $liczba();
}
$a = "2+2";
echo calcString($a);
?>
Trochę mi zajęło odkrycie funkcji create_function i wymyślenie jej zastosowania, ale działa
R117
(R@z0r)
31 Październik 2012 15:01
#8
Oj ludzie, ludzi ;). Matematyka się kłania Zamykając to w zmienną dajesz to jak by w nawias. Wynik jest matematycznie poprawny. 10/24 = 0.41666666666667 :-D; Jak obejść zostało napisane ale to raczej jeden ze ślepych przykładów, bo w takiej formie jaką pokazałeś to zawinił program.