PHP로 간단한 계산기를하기 위해 RPN을 사용하려고합니다. 위키 설명과 몇 가지 자습서를 따르려고했지만 현재 첫 번째 피연산자와 관련된 문제를 해결하고 있습니다. end()로 지정할 수 없습니다.PHP의 RPN
내 문제는 $ nb1 = end ($ stack) 줄에서 왔습니다.
<?php
function add($stack, $nb1, $nb2)
{
array_push($stack, $nb1 + $nb2);
$result = $nb1 + $nb2;
echo $nb1 . ' + ' . $nb2 . ' = ' . $result . "\n";
}
function sub($stack, $nb1, $nb2)
{
array_push($stack, $nb1 - $nb2);
$result = $nb1 - $nb2;
echo $nb1 . ' - ' . $nb2 . ' = ' . $result . "\n";
}
function div($stack, $nb1, $nb2)
{
array_push($stack, $nb1/$nb2);
$result = $nb1/$nb2;
echo $nb1 . '/' . $nb2 . ' = ' . $result . "\n";
}
function mul($stack, $nb1, $nb2)
{
array_push($stack, $nb1 * $nb2);
$result = $nb1 * $nb2;
echo $nb1 . ' * ' . $nb2 . ' = ' . $result . "\n";
}
function calc($input)
{
$stack = array();
$token = explode(" ", trim($input));
$count = count($token);
// echo $count . "\n";
// print_r($token);
for ($i = 0; $i < $count; $i++) {
$tokenNUm = "";
if (is_numeric($token[$i])) {
array_push($stack, $token[$i]);
print_r($token);
} else {
$nb2 = end($stack);
array_pop($stack);
$nb1 = end($stack);
array_pop($stack);
echo "nb1 : ". $nb1 . "\n";
echo "nb2 : ". $nb2 . "\n";
switch($token[$i]) {
case '+':
add($stack, $nb1, $nb2);
case '-':
sub($stack, $nb1, $nb2);
case '/':
div($stack, $nb1, $nb2);
case '*':
mul($stack, $nb1, $nb2);
default:
die('Error');
}
}
return end($stack);
}
}
echo "Final result = " . calc($argv[1]) . "\n";
나는 당신이 말한 것을 시도했지만 아무 것도 바뀌지 않았다. – AznYouth
@AznYouth는 내 대답을 보았다. – zstate
나의 이전 버전은 이미 그 점을 지적했다. @state – AznYouth