2016-03-21 38 views
0

私は動的配列を持っています。
は、どのように私は、動的にそれを解決することができ、仮定する動的配列で数学的計算を実行する

array (size=3) 
    0 => string '20' (length=2) 
    1 => string '-' (length=1) 
    2 => string '5' (length=1) 

その結果が定義されていません20-5 = 5

配列のサイズになりますことができますか?

+3

「20-5 = 5」大丈夫です。 – Rizier123

+0

いくつのオペランドを持つことができますか? '(4/2)* 5 - 1'のようなものがサイズ9の配列で可能性がありますか? –

+0

opertoreは+、 - 、*、/ですが、配列内のオペランドの数は定義されていませんが、私の質問は配列を使ってこれを解決する方法ですか? –

答えて

2

次のコードを使用できます。もちろん、いくつかの制限があります。あなたが何をしたいのか、なぜそれをやっているのかによって異なります。

<?php 

$array = array(
    '20', 
    '-', 
    '5', 
    '*', 
    '10' 
); 

$output = null; 
$symbol = null; 
foreach ($array as $item) { 
    if ($item == '+' || $item == '-' || $item == '*' || $item == '/') { 
     if ($output === null) { 
      die("First item should be numeric! "); 
     } 
     $symbol = $item; 
     continue; 
    } elseif (!is_numeric($item)) { 
     die("unknown symbol: " . $item); 
    } 

    // is numeric 
    // first symbol 

    if ($output == null) { 
     $output = $item; 
     continue; 
    } 

    if ($symbol === null) { 
     die('Two numbers in a row!!'); 
    } 

    switch ($symbol) { 
     case '+': 
      $output += $item; 
      break; 
     case '-': 
      $output -= $item; 
      break; 
     case '*': 
      $output *= $item; 
      break; 
     case '/': 
      $output /= $item; 
      break; 

    } 
} 

echo "Calculation is: " . $output; 
+1

小さな間違い部門: '$ output&= $ item;'は '$ output/= $ item;' – maxhb

1

phpsが最も嫌われて機能を恐れる数少ないケースの1つが便利です。

eval()

$input = array('20', '-', '5'); 

// build formula from array by glueing values together 
$formula = implode(' ', $input); 

// execute the formula and store result in $result 
eval('$result = ' . $formula . ';'); 

// voila! 
echo $formula . ' = ' . $result; 

eval()を使用してのいいところは、あなたがPHPで知られているすべての数学演算を使用することができ、さらにはブラケットの取り扱いが完全にサポートされていることです。

http://sandbox.onlinephpfunctions.com/code/71ffc94238a5510cd7b24632fc7a8b9b5cb2c2c0を参照してください。より多くの数式をテスト用に定義しています。

+0

@maxhbに感謝します。あなたが私の日を救った –

+0

これは本当にあなたの一日を保存した場合、解決策を受け入れる必要があります;-) – maxhb