Question

Quelqu'un peut-pls me montrer comment la carte correctement? Je suis en train de comprendre comment utiliser php exploser () et l'organisation des valeurs d'une manière que je peux récupérer et de les imprimer en une matière organisée. Pour chaque enregistrement, je veux mettre un nom = valeur dans un seau particulier. Je (7) seaux max par enregistrement. Parfois, je les enregistrements qui ne rempliront pas chaque seau.

(par exemple disque (2) est attributs manquants (5,6,7) et le dossier (3) est manquante attribut (4)).

1-Column=host1.colo.sub;2-Column=Fri Aug 13;3-Column=db9.nfl.colo2.;4-Column=00:00:03;5-Column=01:55:02;6-Column=87.24 MB;7-Column=Success;
1-Column=host1.colo.sub;2-Column=Fri Aug 13;3-Column=pdb2.colo2.;4-Column=04:00:02;
1-Column=host1.colo.sub;2-Column=Fri Aug 13;3-Column=gl3_lvm;5-Column=04:48:06;6-Column=54.64 MB;7-Column=Success;

Jusqu'à présent, j'écrit ceci pour voir ma sortie:

<?php
$InputFile = file("test.txt");
foreach ($InputFile as $line){
    $pieces = explode(";", $line);
         //print $pieces[0];
         //print $pieces[1];
         //print $pieces[2];
         print $pieces[3];
         //print $pieces[4];
         //print $pieces[5];
         //print $pieces[6];
//print_r($line);
}
?>

Je voudrais imprimer des valeurs similaires pour chaque attribut au lieu de celui-ci où son mélange. L'utilisation de 'print $ pièces [3];

4-Column=00:00:034-Column=04:00:025-Column=04:48:06
Était-ce utile?

La solution

$InputFile = file("test.txt");
foreach ($InputFile as $line){
  preg_match('~(1-Column[^;]*;?)?(2-Column[^;]*)?;?(3-Column[^;]*)?;?(4-Column[^;]*)?;?(5-Column[^;]*)?;?(6-Column[^;]*)?;?(7-Column[^;]*)?;?~',$line,$pieces);
  $pieces = array_pad($pieces,8,'');
  echo "<pre>";print_r($pieces);echo "</pre>";

}

sortie:

Array
(
    [0] => 1-Column=host1.colo.sub;2-Column=Fri Aug 13;3-Column=db9.nfl.colo2.;4-Column=00:00:03;5-Column=01:55:02;6-Column=87.24 MB;7-Column=Success;
    [1] => 1-Column=host1.colo.sub;
    [2] => 2-Column=Fri Aug 13
    [3] => 3-Column=db9.nfl.colo2.
    [4] => 4-Column=00:00:03
    [5] => 5-Column=01:55:02
    [6] => 6-Column=87.24 MB
    [7] => 7-Column=Success
)

Array
(
    [0] => 1-Column=host1.colo.sub;2-Column=Fri Aug 13;3-Column=pdb2.colo2.;4-Column=04:00:02;
    [1] => 1-Column=host1.colo.sub;
    [2] => 2-Column=Fri Aug 13
    [3] => 3-Column=pdb2.colo2.
    [4] => 4-Column=04:00:02
    [5] => 
    [6] => 
    [7] => 
)

Array
(
    [0] => 1-Column=host1.colo.sub;2-Column=Fri Aug 13;3-Column=gl3_lvm;5-Column=04:48:06;6-Column=54.64 MB;7-Column=Success;
    [1] => 1-Column=host1.colo.sub;
    [2] => 2-Column=Fri Aug 13
    [3] => 3-Column=gl3_lvm
    [4] => 
    [5] => 5-Column=04:48:06
    [6] => 6-Column=54.64 MB
    [7] => 7-Column=Success
)

Autres conseils

Si vos données d'entrée est si irrégulière que vous soit nécessaire de ne l'analyser avec un peu plus de code, et pas seulement d'une simple explosion, ou le préparer pour qu'il fonctionne comme prévu avec exploser.

Dans le second cas, vous pouvez utiliser strpos pour trouver tous " « ; caractères de la chaîne et vérifier si le nombre d'eux est en ordre. Si un numéro (ou plus) a été vous avez sauté devrait compenser en insérant une autre « ; ». De cette façon, exploser va créer un élément de tableau vide et tous vos tableaux résultant doit être aligné.

Alors on ne sait pas exactement ce que vous essayez d'accomplir, nous espérons que ce code peut vous aider à comprendre ce qui se passe.

Notez que ici, je l'ai ajouté une autre boucle dans la principale foreach, itérer sur chaque paire nom / valeur dans la ligne:

<?php
$InputFile = file("test.txt");
$lineCnt = 0;
foreach ($InputFile as $line){
    $lineCnt++;
    echo "Processing line #" . $lineCnt. "\n";
    $pieces = explode(";", $line);
    foreach($pieces as $pair){
    $pair = explode('=',$pair);
        if (!empty($pair[1])){
            print "\t".$pair[0] .' = ' . $pair[1] . "\n";
        }
    }

}

Le script produira une sortie prospectifs belle si elle est exécutée à partir de la ligne de commande. Si vous utilisez dans le navigateur, vous pouvez changer le \ n est à
et ou quelque chose de la \ t.

Voir si cela aide ...

$splits = explode(';',$_POST['data']);
foreach($splits as $id => $item) {
    preg_match('/(.*?)=(.*)/',$item, $matches);
    $parts[$matches[1]][] = $matches[2];
}
print_r($parts);

Cela vous donnera un tableau avec les clés comme 1-colonne, 2 colonnes comme ainsi de suite qui contiendra un tableau de valeur correspondante. Vous pouvez imprimer ce tableau de quelque manière que vous voulez.

Voici la sortie:

[1-Column] => Array
    (
        [0] => host1.colo.sub
        [1] => host1.colo.sub
        [2] => host1.colo.sub
    )

[2-Column] => Array
    (
        [0] => Fri Aug 13
        [1] => Fri Aug 13
        [2] => Fri Aug 13
    )

[3-Column] => Array
    (
        [0] => db9.nfl.colo2.
        [1] => pdb2.colo2.
        [2] => gl3_lvm
    )

[4-Column] => Array
    (
        [0] => 00:00:03
        [1] => 04:00:02
    )

[5-Column] => Array
    (
        [0] => 01:55:02
        [1] => 04:48:06
    )

[6-Column] => Array
    (
        [0] => 87.24 MB
        [1] => 54.64 MB
    )

[7-Column] => Array
    (
        [0] => Success
        [1] => Success
    )
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top