как использовать php с ini-файлами

Мой 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. Эти коды не дают никакого вывода. Помогите мне решить эту проблему?

Вы ищете значения, не получающие ключ, 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; } } с 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; } } 

пытаться

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

Я предлагаю вам создать статический класс, поэтому вам не нужно повторно отображать один и тот же файл ini для каждого отдельного ключа, который вы хотите:

 class iniParser { private static $parsedFile = null; public static function String($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::String("PARD_INSTALL");