#php #arrays #file-get-contents
#php #массивы #file-get-contents
Вопрос:
По какой-то причине я хочу отделить ключи и значения от ассоциативного массива и прочитать их из текстового файла:
Ниже приведено то, что у меня было
// translations
$lang = array(
'All Articles' => 'Alle Artikelen',
'Page' => 'Pagina',
'from' => 'van'
);
Теперь я хочу изменить это следующим образом:
$lang = array(
file_get_contents("translations.txt"); // read the associative array
);
и translations.txt
содержит только:
'All Articles' => 'Alle Artikelen',
'Page' => 'Pagina',
'from' => 'van',
Это не работает. Как я могу считывать пары ключ / значение, когда они хранятся в текстовом файле, как указано выше?
Ответ №1:
Невозможно получить содержимое файла и напрямую назначить массив. Вам нужно проанализировать файл, извлечь строки, затем извлечь ключ и значение.
$str = file_get_contents("translations.txt");
$lang = [];
foreach (explode("n", $str) as $line)
{
if (strpos($line, '=>') === false)
{
continue;
}
list($key, $value) = explode('=>', $line);
$lang[trim($key,'' ')] = trim(trim($value), '',');
}
Используя explode
извлечение строк на основе разрыва строки ( n
).
if (strpos($line, '=>') === false)
это элемент управления для предотвращения ошибок в пустых строках (обычно в конце файла)
Еще лучше использовать файл json:
translations.json
{"All Articles":"Alle Artikelen","Page":"Pagina","from":"van"}
И php-код:
$lang = json_decode(file_get_contents(public_path('lang.json')), true);
var_dump($lang);
Комментарии:
1. Я не думал о json, но это действительно очень хорошая альтернатива! Thnx
Ответ №2:
Это может быть опасно. Он выполнит код, содержащийся в файле.
eval(
'$lang = array('.
file_get_contents("translations.txt"). // read the associative array
');'
);
echo '<pre>';
var_dump($lang);
Выходной сигнал:
array(3) {
["All Articles"]=>
string(14) "Alle Artikelen"
["Page"]=>
string(6) "Pagina"
["from"]=>
string(3) "van"
}
Комментарии:
1.
eval
функция может быть опасной