2015-12-13 3 views
-2

Мне нужно регулярное выражение для поиска в массиве, а затем вернуть значение этого ключа.php regex для поиска ключа массива и возвращаемого значения

например: Я хочу получить значение var1.

мой конфиг

<?php 

return [ 
    'var1' => 'test1', 
    'var2' => 'test2', 
    'var3' => 'test3' 
]; 

?> 

тогда он должен вернуть test1

+0

И как это, что происходит? – Utkanos

+3

И почему это не так просто, как 'echo $ array ['var1'];' работает для вас? – JakeGould

+0

@JakeGould, потому что я хочу извлечь значение из файла, а затем обновить значение и вставить его обратно в файл. – Tafelglotzer

ответ

1

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

Предположим, что ваш конфигурационный файл называется config.php и содержит фрагмент кода, который вы указали в вашем примере:

<?php 

return [ 
    'var1' => 'test1', 
    'var2' => 'test2', 
    'var3' => 'test3', 
]; 

Вы действительно можете присвоить возвращаемое значение include или require переменной. Например, в другом сценарии (если вы находитесь в том же каталоге), вы можете сделать это:

<?php 
// your config file... 
$file = __DIR__ . '/config.php'; 

// ensure the file exists and is readable 
if (!is_file($file) || !is_readable($file)) { 
    throw new RuntimeException(
     sprintf('File %s does not exist or is not readable!', $file) 
    ); 
} 

// include file and assign to variable `$config` 
// which now contains the returned array 
$config = include $file; 

echo 'original config:' . PHP_EOL; 
print_r($config); 

// update config key `var1` 
$config['var1'] = 'UPDATED!'; 

echo 'updated config:' . PHP_EOL; 
print_r($config); 

Это дает:

original config: 
Array 
(
    [var1] => test1 
    [var2] => test2 
    [var3] => test3 
) 
updated config: 
Array 
(
    [var1] => UPDATED! 
    [var2] => test2 
    [var3] => test3 
) 

Я был первоначально немного удивлен тем, что вы могли бы использовать return вне контекст функции/метода, но это совершенно верно. Вы узнаете что-то новое каждый день ... Этот вариант использования фактически документирован в соответствии с документацией для include - для получения более подробной информации см. Example #5 include and the return statement.

Обратите внимание, что если вы используете include или require, чтобы использовать ненадежные или внешние скрипты, применяются обычные соображения безопасности. Это обсуждается в документации, приведенной выше.

Кроме того, если ваш файл включен в синтаксическую ошибку, то вы, вероятно, получите parse error или подобное, но я думаю, это очевидный момент!

Редактировать

Наконец, следует указать на то, что Ваш вопрос не спрашивает, как сохранить обновленную конфигурацию обратно в файл, но вы же оставить комментарий под этим предполагает, что вы хотите сделать это также ,

Однако, если вы хотите обновить и сохраняться в конфигурации на файл, я бы определенно использовать более податливый метод для записи/чтения эти данные/с диска - возможно json_encode() и json_decode, serialize() и unserialize().

Тем не менее, вот наивный раствор, в котором вы можете написать свои обновленные конфигурации:

// ... 

// file has to be writeable! 
if (!is_writeable($file)) { 
    throw new RuntimeException(
     sprintf('File %s is not writeable!', $file) 
    ); 
} 

file_put_contents($file, 
    sprintf('<?php return %s;', var_export($config, true))); 

Далее чтение:

Надеется, что это помогает :)

+0

, но мне нужно записать его обратно в конфигурационный файл, не выводя его – Tafelglotzer

+1

Действительно :) Я заметил, что вы так прокомментировали свой вопрос, и я соответствующим образом обновил свой ответ. Позвольте мне указать, что ваш ** вопрос ** сам не указывает этого - я бы предложил обновить вопрос, включив это требование. –

+0

Спасибо, что работает, но можно ли очистить файл, я имею в виду, что он не читается? – Tafelglotzer

Смежные вопросы