Question

Je dois être capable d'analyser ce type de données en PHP:

 Acct: 1 
 email       : bleh@gmail.com 
 status      : online 
 -------------------------------------------------- 

 Acct: 2 
 email       : dfgg@fgfg.com     
 status      : banned 
 -------------------------------------------------- 

 Acct: 3 
 signedupname  : SomeUsername     
 somethingelse  : offline 
 -------------------------------------------------- 

Comme vous pouvez voir les données est en grande partie aléatoire. La seule chose qui reste le même est le ----- seperating chaque entrée et les bits de Acct: 1. Le rembourrage entre chaque : change souvent de même que la variable pour représenter chaque bit de données.

J'ai essayé d'aller à travers et l'analyse moi-même tout en utilisant regex mais je suis pas assez qualifiés retournerons certainement pour être en mesure de le faire correctement. A la fin de ce que je veux données selon ce qui suit:

Acct: <integer>
var1: <string>
var2: <string>

Si cela a un sens du tout. Il n'a pas besoin d'être que effeciant, comme je devrai le faire environ une fois par jour et je ne me dérange pas d'attendre combien de temps il jamais besoin.

Merci. :)

Edit: Voici ce que je l'ai fait moi-même:

<?php

$data = file_get_contents('records.txt');
$data = explode('******** Saved Host list with acct/variables ********', $data);
$data = explode('--------------------------------------------------', $data[1]);

foreach($data as &$dataz)
{
    $dataz = trim($dataz);
}

$data = str_replace('Acct:', "\nAcct:", $data);

foreach($data as $dataz)
{
    preg_match('/Acct: (.*)/', $dataz, $match);
    $acct = $match[1];
    preg_match('/: (.*)/', $dataz, $match);
    $var1 = $match[1];
    echo $var1;
}

?>

je me suis aussi loin que l'extraction de la partie Acct:, mais quoi que ce soit au-delà de ce que je ne peux tout simplement pas obtenir ma tête.

Était-ce utile?

La solution

Ce morceau de code prendra votre entrée entière et produire un tableau associatif pour chaque enregistrement dans votre entrée:

// replace ----- with actual number of dashes
foreach (explode('-----', $input) as $entry) {
  $entry = trim($entry);
  $record = array();
  foreach (explode("\n", $entry) as $line) {
    $parts = explode(':', $line);
    $varname = trim($parts[0]);
    $value = trim($parts[1]);
    $record[$varname] = $value;
  }
  // Do anything you want with $record here
}

Modifier Je viens d'avoir un coup d'oeil au code affiché. Vous avez vraiment pas besoin d'expressions régulières pour ce que vous essayez de faire. Regex peut être très pratique lorsque utilisé au bon endroit, mais la plupart du temps, ce n'est pas la bonne chose à utiliser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top