Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从每个define(';name';,';value';)读取名称和值;在.php文件中_Php_File_Parsing - Fatal编程技术网

从每个define(';name';,';value';)读取名称和值;在.php文件中

从每个define(';name';,';value';)读取名称和值;在.php文件中,php,file,parsing,Php,File,Parsing,我正在实现一个php接口来处理一个.php文件,该文件包含一组定义语句,这些语句使用文本值定义常量,以便有人翻译 输入被逐句解析,并显示在翻译界面上,翻译人员将在html文本区域中输入翻译并将其发送到服务器 在该过程结束时,将生成一个输出文件,与input.php文件相同,只转换了define值 例如,处理输入文件“eng.php”,如下所示: <?php define ("SENTENCE_1", "A sentence to translate"); ?> <?php d

我正在实现一个php接口来处理一个.php文件,该文件包含一组定义语句,这些语句使用文本值定义常量,以便有人翻译

输入被逐句解析,并显示在翻译界面上,翻译人员将在html文本区域中输入翻译并将其发送到服务器

在该过程结束时,将生成一个输出文件,与input.php文件相同,只转换了define值

例如,处理输入文件“eng.php”,如下所示:

<?php
define ("SENTENCE_1", "A sentence to translate");
?>
<?php
define ("SENTENCE_1", "The same sentence translated to spanish");
?>

将给出如下所示的翻译输出文件“spa.php”:

<?php
define ("SENTENCE_1", "A sentence to translate");
?>
<?php
define ("SENTENCE_1", "The same sentence translated to spanish");
?>

为此,我想知道:

  • 解析输入文件以获取数组中的常量名称和值的最佳方法是什么?(类似于
    $var[0]['name']
    的内容将是“句子1”,而
    $var[0]['value']
    将是“要翻译的句子”)

  • 有没有可能在输入文本区域中显示google translator的翻译,作为翻译人员的编辑建议?怎么用?(我读到google translator api v1不再提供,v2只作为付费服务提供。有没有免费的替代方案?)

  • 那么呢?

    用于获取所有已定义常量的列表

    获取用户定义的常量

    $allconstants = get_defined_constants(true);
    print_r($allconstants['user']);
    
    并没有给出你想要的结构,但应该足够了

    define('MY_CONSTANT', 'something');
    define('MY_CONSTANT_2', 'another');
    
    $constants = get_defined_constants(true);
    $constants = $constants['user'];
    
    print_r($constants); 
    /**
     * array(
     *  'MY_CONSTANT' => 'something',
     *  'MY_CONSTANT_2' => 'another'
     * )
     */
    

    请注意,这将是当前作用域中定义的所有常量,在PHP中,这将是此请求中定义的任何内容。

    以防任何人需要将给定.PHP文件中定义的常量名称和值读取到变量数组中,而不实际定义这些常量(例如,如果以前定义了具有相同名称的不同常量,因此在使用
    include
    require
    处理文件时出现错误),下面是我的操作方法(警告:我还没有遇到任何问题,但尚未对其进行彻底测试,因此可能存在错误)

    您可以看到,我假设每行不超过1个
    define
    语句,并且常量的名称和值使用PHP表示法(在单(')或双(“)引号之间)指定为字符串值

    此外,转义引号(\”或\')临时转义为\q(\”)或\s(\'),以正确匹配非转义引号,然后在将非转义引号之间的内容分配给$name和$value后,按常规转义回去


    google api问题是用microsoft translation api解决的(每月最多释放2.000.000个字符):

    为什么不使用数组?这么多常量占用了大量内存。我不使用数组的原因是它们是常量,这意味着它们的值自第一次赋值后就不会改变。这似乎是用define声明它们的正当理由…噢,gawd。不要使用该死的explode以繁琐的方式拆分字符串。使用正则表达式并执行此操作我知道。但是regex讨厌我,我不想花一整晚的时间来弄明白为什么我给你的答案是最快的,和其他人一样有用(他们也很快,我很感激),但是我的答案完成了你的答案(特别是因为没有人对我的问题的第2点说什么)。谢谢