2017-04-11 4 views
0

Ich habe eine INI-Datei erhalten, die wie folgt aussieht:Abschnittsnamen von Schlüsselnamen von einer INI-Datei in php

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

[efd3dd758092ad90e35fb634a203c41b90da6333] 
76561197964385070=Kelininkas 
76561199641652847=Kelininkas 

Wie ist es möglich, in PHP die Abschnittsnamen zurückzukehren, indem sie mit einem Schlüsselnamen suchen (oder optionaler Schlüsselwert).

z.B. 76561197964385070 -> efd3dd758092ad90e35fb634a203c41b90da6333 und optional

Kelininkas -> efd3dd758092ad90e35fb634a203c41b90da6333

Ich importierte die INI-Datei in ein Array, und ich bin in der Lage die Schlüssel und Artikel zu finden.

Aber nicht der Schlüsselname des übergeordneten Schlüssels.

<?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 

?> 

Ergebnis:

76561197962180330 FOUND Spow 

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

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

) 

Vielen Dank im Voraus

+2

Hallo. Wir sind hier, um Ihnen zu helfen, nicht um Code für Sie zu schreiben. Zeig uns, was du bisher versucht hast, teile deine Gedanken mit uns und wir helfen dir - aber niemand wird Code für dich schreiben. http://StackOverflow.com/Help/how-to-ask – Twinfriends

+0

Ich habe einige Informationen über meinen aktuellen Code hinzugefügt, aber ich versuche immer noch herauszufinden, wie ich den ersten Level Key-Namen dieses mehrdimensionalen Arrays bekommen kann. – Nordi

Antwort

0

Wenn Sie auf einem Linux-Rechner sind, dies könnte Ihnen helfen. Dies ist keine Lösung, sondern ein Weg, auf dem Sie weiter gehen können.

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

Die obigen Befehle funktionieren nicht mit Ihrer Originaldatei.

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

jedoch, wenn Sie die Taste & Werte unter einem Block kennen, wissen, können Sie dies versuchen.

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

Beachten Sie die an grep übergebenen Argumente [-B 1/2/3].

Ich kann Ruby & Python-Lösungen anbieten, wenn Sie bevorzugen.

0

meine eigene Lösung gefunden:

<?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 

?> 

Basierend auf:

get parent array name after array_walk_recursive function

Verwandte Themen