Мой 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");