Разбор PHP текстовой области из текстового файла

У меня есть текстовый файл со следующей структурой:

[account]
user                          = heinz
pwd                           = heinz123
description                   = ralf
caid                          = 098C,1702,1830,0B00,0D95,0648,0500,0B02,09C4
expdate                       = 2015-06-30
au                            = 1
group                         = 1,2,3,4,5,6,7,8,9,30
cccmaxhops                    = 5
cccreshare                    = 0
cccignorereshare              = 1

[account]
user                          = klaus
pwd                           = klaus123
caid                          = 098C,1702,1830,0B00,0648,0D95,0500,09C4
description                   = sven
au                            = 1
betatunnel                    = 1833.FFFF:1702
expdate                       = 2015-06-30
group                         = 1,2,3,4,5,6,7,8,9,30
services                      = !xxl
cccmaxhops                    = 5
cccreshare                    = 1
cccignorereshare              = 1

[account]
user                          = paul
pwd                           = paul123
description                   = ralf
caid                          = 1702,1830,0B00,0D95,0648,0500,0B02,098C
betatunnel                    = 1833.FFFF:1702
expdate                       = 2015-06-30
group                         = 1,2,3,4,5,6,7,8,9,30
cccmaxhops                    = 5
cccreshare                    = 0
cccignorereshare              = 1

Теперь, например, мне нужно получить поле «пользователь», где описание «sven». Это должно вернуть «Клаус». Любая идея, как сделать это легко с помощью PHP? Каждый блок пользователя начинается с «[account]» и заканчивается «cccignorereshare = 1».

0

Решение

Предполагая, что ваше содержимое файла загружено в var $content, Это сделает работу и укажет вам правильное направление, чтобы получить другую информацию из строки содержимого / файла.

// Build array
$accounts = array();
$tmpAccounts = explode( "[account]", $content );
foreach ( $tmpAccounts as $data ) {
$tmpLines = explode( "\n", $data );
$parsedData = array();
foreach ( $tmpLines as $line ) {
list( $key, $value ) = explode( "=", $line );
$parsedData[trim( $key )] = trim( $value );
}
$accounts[] = $parsedData;
}

// Find 'sven' as description in array
$user = '';
foreach ( $accounts as $account ) {
if ( $account['description'] == 'sven' ) {
$user = $account['user'];
}
}

// Output
echo( $user );

Другой способ — использовать какие-то регулярные выражения. Но приведенный выше код должен работать.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]