سؤال

هل هناك محول برامج يمكنه تحويل رمز Python هذا تلقائيًا إلى 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')
هل كانت مفيدة؟

المحلول

لست على دراية بأي محول بيثون إلى PHP في البرية ، ولكن يجب أن تكون مهمة تافهة للمنفذ ، ومن السهل جدًا تحديد أوجه التشابه:

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');

يمكن أيضًا كتابة الأسطر القليلة الأخيرة في الوظيفة الأولى كتعبير قياسي Ternary PHP:

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

نصائح أخرى

لقد قمت بإنشاء محول بيثون إلى PHP يسمى PY2PHP. يمكنه نقل المنطق الأساسي تلقائيًا ومن ثم ستحتاج إلى تعديل مكالمات المكتبة ، وما إلى ذلك.

فيما يلي PHP تم إنشاؤه تلقائيًا من Python المقدمة من OP.

<?php
require_once('py2phplib.php');
require_once( 'math.php');
function calcNumEntropyBits($s) {
    if ((count($s) <= 0)) {
        return 0.0;
    }
    $symCount = array();
    foreach( $s as $c ) {
        if (!$symCount.__contains__($c)) {
            $symCount[$c] = 1;
        }
        else {
            $symCount[$c] += 1;
        }
    }
    $entropy = 0.0;
    foreach( $symCount->iteritems() as $temp_c ) {
        $prob = ($n / float(count($s)));
        $entropy += ($prob * (math::log($prob) / math::log(2)));
    }
    if (($entropy >= 0.0)) {
        return 0.0;
    }
    else {
        return -($entropy * count($s));
    }
}

function testEntropy($s) {
    pyjslib_printFunc(sprintf('Bits of entropy in \'%s\' is %.2f', new pyjslib_Tuple([$s, calcNumEntropyBits($s)])));
}

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

لن يتم تشغيله بشكل صحيح بسبب استيراد الرياضيات و __contains__ ، ولكن سيكون من السهل الإصلاح باليد.

إنني تقريبًا 1/2 طريقة صنع مترجم PHP في Python وأستطيع أن أخبرك أن هناك حرفيًا العشرات من حالات الحافة الرئيسية التي تلعب الآلاف من الاحتمالات التي تجعل من المستحيل تقريبًا أن تنطوي على Python إلى PHP. لدى Python قواعد نحوية أكثر قوة ثم PHP مع مزيد من FOWARD في اللغة ، ربما تكون Python's Stdlib واحدة من أكثرها تقدمًا بالمقارنة مع أي لغة أخرى في فصلها.

توصيتي هي أخذ سؤالك خطوة واحدة إلى الخلف ، لماذا تحتاج إلى مجموعة من المنطق القائم على Python في PHP. يمكن أن تشمل بدائل محاولة PORT/ترجمة الكود الخاص بك المعالجة الفرعية من PHP إلى Python ، باستخدام Gearman لجعل Python يعمل في الواجهة الخلفية بينما يعرض PHP منطقًا ، أو أن الحل الأكثر مشاركة هو تنفيذ ناقل خدمة أو قائمة انتظار بالرسالة بين تطبيق PHP وخدمات Python.

ملاحظة. أعتذر عن أي مشكلات قابلية للقراءة ، وإنهاء سباق لمدة يومين الآن.

لا توجد أداة من هذا القبيل ، سيتعين عليك تنفيذ الكود بنفسك

تساءلت عن هذا السؤال نفسه ، ووجدت هذا pytophp.py ملف في موقع githubgist. الأمر بسيط ، ويبدو نقطة بداية للبدء.

سألقي نظرة عليه !!!

لقد غيرت المكتبة PY2PHP من https://github.com/dan-da/py2php وتخبطه في مستودع جديد في https://github.com/bunkahle/py2php يمكنك الآن أيضًا استخدام مكتبة الرياضيات Python التي تتم ترجمتها إلى رمز PHP. لا يزال يتعين عليك القيام بالتكيف مع التعليمات البرمجية الخاصة بك من أجل جعلها تعمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top