通过php中的ini文件的键名获取节名称

时间:2017-04-11 13:06:18

标签: php ini

我有一个看起来像这样的ini文件:

[236a4e392b6dd0a8409bb91c664ab6468be32555]
76561197961658420=DaRoL
76561197962180350=Spow
76561197962376928=Kolma

[efd3dd758092ad90e35fb634a203c41b90da6333]
76561197964385070=Kelininkas
76561199641652847=Kelininkas

如何在PHP中通过使用键名(或可选键值)进行搜索来返回节名称。

e.g。 76561197964385070 - > efd3dd758092ad90e35fb634a203c41b90da6333和可选

Kelininkas - > efd3dd758092ad90e35fb634a203c41b90da6333

我将ini文件导入数组,然后我就能找到密钥和项目。

但不是上级键的关键名称。

<?php
header('Content-type: text/plain');

$ini_array = (parse_ini_file("BannedHWs.ini",true));

$steamid="76561197962180330";

function find($item, $key)

{   

    global $steamid;    
    if ($key == $steamid)
    echo "$key FOUND $item\n";

}

array_walk_recursive($ini_array, 'find');

echo "\n";
print_r ($ini_array); // SHOW ARRAY

?>

结果:

76561197962180330 FOUND Spow

Array
(
    [236a4e392b6dd0a8409bb91c664ab6468be32d15] => Array
        (
            [76561197961658460] => DaRoL
            [76561197962180330] => Spow
            [76561197962376938] => Kolma
        )

    [efd3dd758092ad90e35fb634a203c41b90da6895] => Array
        (
            [76561197964385060] => Kelininkas
            [76561199641652827] => Kelininkas
        )

)

提前致谢

2 个答案:

答案 0 :(得分:0)

如果您使用的是Linux机器,这可能会对您有所帮助。这不是一个解决方案,而是一条可以走得更远的道路。

$ cat some_config_ini.txt 
[efd3dd758092ad90e35fb634a203c41b90da6333]
76561197964385070=Kelininkas
76561199641652847=Kelininkas
$ cat some_config_ini.txt | grep Kelininkas -B 1 | head -1
[efd3dd758092ad90e35fb634a203c41b90da6333]

以上命令不适用于原始文件。

$ cat som_config_ini.txt | grep Spow -B 1 | head -1
76561197961658420=DaRoL

但是,如果你知道块下的键和值,你可以尝试这个。

$ cat som_config_ini.txt | grep Spow -B 2 | head -1
[236a4e392b6dd0a8409bb91c664ab6468be32555]
$ cat som_config_ini.txt | grep Kolma -B 3 | head -1
[236a4e392b6dd0a8409bb91c664ab6468be32555]

请注意传递给grep [-B 1/2/3]的参数。

如果您愿意,我可以提供ruby&amp; python解决方案。

答案 1 :(得分:0)

找到我自己的解决方案:

<?php
header('Content-type: text/plain');

$ini_array = (parse_ini_file("BannedHWs.ini",true));

$steamid="76561199641652827";


function findID(array $array, $path = null) {
    global $steamid;
    foreach ($array as $k => $v) {
        if (!is_array($v)) {
            if ($k == $steamid){
            echo "HWID: $path\n";
            }
        }
        else {           
            findID($v, $path.$k);
        }
    }
}

findID($ini_array);

//echo "\n";
//print_r ($ini_array); // SHOW ARRAY

?>

基于:

get parent array name after array_walk_recursive function