3

我的php代码在这里

 <?php
    function String($word){


            $lang = parse_ini_file("../pard_language/en/language.ini");

        $key = array_search($word, $lang); 
        if(isset($key)){
        echo $key;

        }
        }


     echo String("PARD_INSTALL");
    ?>

我的 language.ini 文件是这个

PARD_INSTALL = Install
PARD_USER_AGGREMENT = User Aggrement
PARD_AGREE = Agree
PARD_HOST_NAME = Host Name
PARD_DATA_BASE = Data Base
PARD_DATA_BASE_USER =  Data Base User
PARD_DATA_BASE_USER_PASS_WORD =  Data Base User Password
PARD_CONNECT = Connect
PARD_RESET = Reset
PARD_ADMIN_USER_NAME =  Admin User Name
PARD_ADMIN_USER_PASS_WORD =  Admin User Password
PARD_LOGIN = Login

这是我上面的代码不起作用。我想保留一个包含语言的ini文件,需要使用上面的php函数获取单词值。这个代码没有给出任何输出。请帮我解决这个问题?

4

3 回答 3

5

您正在搜索未获得键的值, parse_ini_file将返回所有元素的数组,因此$lang[$word]您应该获得所需的值...

function String($word) {
    $lang = parse_ini_file("../pard_language/en/language.ini");
    return isset($lang[$word]) ? $lang[$word] : null ;
}

现在这仍然是一个BAD Approach为什么?

  • parse_ini_file每次需要加载文件时都必须调用
  • String是一个函数的坏名字
  • echo被调用了两次.. 1.在函数内和函数外使用return

这是我会使用的:

$ini = new ArrayINI("../pard_language/en/language.ini");
echo $ini("PARD_INSTALL");
// or
echo $ini['PARD_INSTALL'];

因为我也扩展IteratorAggregate了我可以循环所有的值

foreach ( $ini as $k => $value ) {
    var_dump($k . " = " . $value);
}

使用的类

class ArrayINI implements ArrayAccess, IteratorAggregate {
    private $lang;

    public function __construct($ini) {
        $this->lang = parse_ini_file($ini);
    }

    function __invoke($offset) {
        return $this->offsetGet($offset);
    }

    public function getIterator() {
        return new ArrayIterator($this->lang);
    }

    public function offsetSet($offset, $value) {
        if (is_null($offset)) {
            $this->lang[] = $value;
        } else {
            $this->lang[$offset] = $value;
        }
    }

    public function offsetExists($offset) {
        return isset($this->lang[$offset]);
    }

    public function offsetUnset($offset) {
        unset($this->lang[$offset]);
    }

    public function offsetGet($offset) {
        return isset($this->lang[$offset]) ? $this->lang[$offset] : null;
    }
}
于 2013-04-12T16:10:29.187 回答
1

我建议您创建一个静态类,这样您就不必为所需的每个键重新解析相同的 ini 文件:

class IniParser {
    private static $parsedFile = null;

    public static function getValue($word) {
        if (self::$parsedFile === null) {
            self::$parsedFile = parse_ini_file("../pard_language/en/language.ini");
        }

        if (isset(self::$parsedFile[$word])) {
            return self::$parsedFile[$word];
        }

        return null;
    }
}


echo IniParser::getValue("PARD_INSTALL");
于 2013-04-12T16:11:10.080 回答
1

尝试

$lang = parse_ini_file("../pard_language/en/language.ini");
print_r($lang);
于 2013-04-12T16:08:50.960 回答