Search code examples
phppythoncode-translationtranspiler

Converting Python Code to PHP


Is there a software converter out there that can automatically convert this python code to PHP?

#!/usr/bin/python
import math

def calcNumEntropyBits(s):
        if len(s) <= 0: return 0.0
        symCount = {}
        for c in s:
                if c not in symCount: symCount[c] = 1
                else: symCount[c] += 1
        entropy = 0.0
        for c,n in symCount.iteritems():
                prob = n / float(len(s))
                entropy += prob * (math.log(prob)/math.log(2))
        if entropy >= 0.0: return 0.0
        else: return -(entropy*len(s))

def testEntropy(s):
        print "Bits of entropy in '%s' is %.2f" % (s, calcNumEntropyBits(s))

testEntropy('hello world')
testEntropy('bubba dubba')
testEntropy('aaaaaaaaaaa')
testEntropy('aaaaabaaaaa')
testEntropy('abcdefghijk')

Solution

  • I'm not aware of any Python-to-PHP converter in the wild, but it should be a trivial task to port and the similarities are quite easy to spot:

    function calcNumEntropyBits($s) {
            if (strlen($s) <= 0) return 0.0;
            $symCount = array();
            foreach (str_split($s) as $c) {
                    if (!in_array($c,$symCount)) $symCount[$c] = 1;
                    else $symCount[$c] ++;
            }
            $entropy = 0.0;
            foreach ($symCount as $c=>$n) {
                    $prob = $n / (float)strlen($s);
                    $entropy += $prob * log($prob)/log(2);
            }
            if ($entropy >= 0.0) return 0.0;
            else return -($entropy*strlen($s));
    }
    
    function testEntropy($s):
            printf("Bits of entropy in '%s' is %.2f",$s,calcNumEntropyBits($s));
    
    testEntropy('hello world');
    testEntropy('bubba dubba');
    testEntropy('aaaaaaaaaaa');
    testEntropy('aaaaabaaaaa');
    testEntropy('abcdefghijk');
    

    The last few lines in the first function could have also been written as a standard PHP ternary expression:

    return ($entropy >= 0.0)? 0.0: -($entropy*strlen($s));