2010-10-20 13 views
4

Possible en double:
Convert array into csvtableau de conversion en fichier txt

Salut,

Comment convertir un tableau dans le fichier txt?

Ceci est mon tableau:

Array 
(
    [OrderList_RetrieveByContactResult] => Array 
     (
      [OrderDetails] => Array 
       (
        [0] => Array 
         (
          [entityId] => 156456 
          [orderId] => 110631 
          [orderName] => testing2 
          [statusTypeId] => 15656 
          [countryCode] => AU 
          [orderType] => 2 
          [invoiceNumber] => 1001 
          [invoiceDate] => 2010-10-19T00:00:00 
          [userID_AssignedTo] => 245454 
          [shippingAmount] => 8.95 
          [shippingTaxRate] => 0 
          [shippingAttention] => tttesst 
          [shippingInstructions] => this a test 
          [shippingOptionId] => 50161 
          [discountCodeId] => 0 
          [discountRate] => 0 
          [totalOrderAmount] => 143.8 
          [directDebitTypeId] => 0 
          [directDebitDays] => 0 
          [isRecur] => 
          [nextInvoiceDate] => 0001-01-01T00:00:00 
          [endRecurDate] => 0001-01-01T00:00:00 
          [cycleTypeID] => 1 
          [createDate] => 2010-10-19T05:40:00 
          [lastUpdateDate] => 2010-10-19T05:40:00 
          [deleted] => 
          [products] => Array 
           (
            [Product] => Array 
             (
              [productId] => 455 
              [productCode] => 
              [productDescription] => testtest 
              [units] => 3 
              [unitPrice] => 44.95 
              [unitTaxRate] => 0 
              [totalProductPrice] => 134.85 
              [productName] => Skin Support Tablets 
             ) 
           ) 

          [addresses] => Array 
           (
            [Address] => Array 
             (
              [addressTypeID] => 8 
              [addressLine1] => Cebu 
              [city] => City 
              [zipcode] => 6000 
              [state] => cebu 
              [countryCode] => PH 
             ) 
           ) 

         ) 

        [1] => Array 
         (
          [entityId] => 315456 
          [orderId] => 321321 
          [orderName] => testing 
          [statusTypeId] => 3213 
          [countryCode] => AU 
          [orderType] => 2 
          [invoiceNumber] => 1002 
          [invoiceDate] => 2010-10-19T00:00:00 
          [userID_AssignedTo] => 11711 
          [shippingAmount] => 8.95 
          [shippingTaxRate] => 0 
          [shippingAttention] => 
          [shippingInstructions] => 
          [shippingOptionId] => 50161 
          [discountCodeId] => 0 
          [discountRate] => 0 
          [totalOrderAmount] => 408.45 
          [directDebitTypeId] => 0 
          [directDebitDays] => 0 
          [isRecur] => 
          [nextInvoiceDate] => 0001-01-01T00:00:00 
          [endRecurDate] => 0001-01-01T00:00:00 
          [cycleTypeID] => 1 
          [createDate] => 2010-10-08T18:40:00 
          [lastUpdateDate] => 2010-10-19T18:36:00 
          [deleted] => 
          [products] => Array 
           (
            [Product] => Array 
             (
              [productId] => 11564 
              [productCode] => 
              [productDescription] => 
              [units] => 10 
              [unitPrice] => 39.95 
              [unitTaxRate] => 0 
              [totalProductPrice] => 399.5 
              [productName] => Acne Clearing Gel 
             ) 

           ) 

          [addresses] => Array 
           (
            [Address] => Array 
             (
              [addressTypeID] => 8 
              [addressLine1] => Cebu City 
              [city] => Cebu 
              [zipcode] => 6000 
              [state] => 
              [countryCode] => PH 
             ) 

           ) 

         ) 

       ) 

     ) 

) 
+1

Votre question n'a aucun sens. Les fichiers .txt n'ont pas de structure. –

+0

Pouvez-vous montrer votre sortie .txt? – pltvs

+1

'file_puts_contents ('file.txt', print_r ($ array, true));' – Petah

Répondre

10

Si vous voulez pour être analysable, vous pouvez utiliser

  • var_export - Sort ou renvoie une chaîne analysable présentation d'une variable

Exemple

file_put_contents('array.txt', var_export($array, TRUE)); 

Si vous voulez que ça ressemble à votre question, vous passez TRUE comme deuxième param à print_r:

file_put_contents('array.txt', print_r($array, TRUE)); 

EDIT vous avez mentionné dans les commentaires que vous souhaitez que le tableau soit transformé en fichier CSV. C'est plus difficile. Votre tableau est imbriqué, tandis qu'un fichier CSV est fondamentalement un seul tableau dim, par exemple.

array('k1' => 'v1', 'k2' => 'v2', ... , 'kn' => 'vn'); 

est équivalent à un fichier CSV où les premières lignes sont les clés de tableau et la deuxième ligne les valeurs.

k1; k2; ...; kn 
v1; v2; ...; vn 

Les tableaux simples dim sont généralement dans un autre tableau, donc vous avez une collection comme ceci:

array(
    array('k1' => 'v1', 'k2' => 'v2', ... , 'kn' => 'vn'), 
    array('k1' => 'v1', 'k2' => 'v2', ... , 'kn' => 'vn') 
); 

Ici, vous auriez à obtenir les clés d'abord, puis aller chercher uniquement les valeurs de le tableau pour les lignes suivantes, par exemple Le problème est que votre tableau est imbriqué encore plus profondément. Où placeriez-vous la rangée address? La seule approche possible consiste à parcourir le tableau et à extraire uniquement les clés et les valeurs qui contiennent un type scalaire et linéariser les tableaux imbriqués, par ex.

array(
    array('k1' => 'v1', 'k2' => 'v2', ... , 'kn' => array('skn' => 'svn')), 
    array('k1' => 'v1', 'k2' => 'v2', ... , 'kn' => array('skn' => 'svn')), 
); 

doit être transformé en

k1; k2; ...; skn 
v1; v2; ...; svn 
v1; v2; ...; svn 

Dans le cas où ce isnt clair, voici une illustration ce qui se passe où:

Flattening a Multidimensional Array for use in a CSV file

Heureusement, cela peut être réalisé avec itérateurs :

$orderDetails = $array['OrderList_RetrieveByContactResult']['OrderDetails']; 
foreach($orderDetails as $key => $details) { 

    $iterator = new RecursiveIteratorIterator(
      new RecursiveArrayIterator($details)); 

    if($key === 0) { 
     $keys = array(); 
     foreach($iterator as $k => $v) { 
      $keys[] = $k; 
     } 
     echo implode(';', $keys); 
    } 

    $values = array(); 
    foreach($iterator as $val) { 
     $values[] = $val; 
    } 
    echo PHP_EOL, implode(';', $values); 
} 

Le code ci-dessus doit sortir le format décrit. Voir http://www.ideone.com/I70dD pour un exemple.

Pour écrire ceci dans un fichier, vous pouvez soit l'assembler en une variable de chaîne, puis file_put_contents en une fois ou vous utilisez un fichier filepointer et l'écrire ligne par ligne. Si vous ne l'avez pas implode mais parcourez le tableau $flattened, vous pouvez également utiliser fputcsv.

+0

Vous ne voulez certainement pas passer true comme second argument dans var_export car cela l'exporte vers un vairable plutôt que de sortir le contenu? – Alex

+0

@Alex Je veux le passer à 'file_put_contents' afin qu'il puisse être écrit dans un fichier. Pour cela, je dois utiliser "TRUE". – Gordon

+0

je vous remercie pour votre message cela m'aide beaucoup mais theres un petit problème avec votre code. Il semble que le [countryCode] => AU n'apparaisse pas à la place, il remplacera le [countryCode] => PH du tableau de produit. Voici ce que j'ai: 156456; 110631; testing2; 15656; PH; 2; .... etc 315456; 321321; test; 3213; PH; 2 .... etc – rayss

1

Peut-être ce que vous voulez est fputcsv?

+1

Pas avec une structure aussi complexe. –

+0

Alors, quelle structure voulez-vous? – MatTheCat

7

Si vous souhaitez enregistrer une variable dans un fichier texte, vous pouvez utiliser les fonctions serialize()/unserialize() pour que:

$data = array(1, 2, 3, ''); 
$toBeSaved = serialize($data); 
file_put_contents('somefile.txt', $toBeSaved); 

et restaurer ...

$toBeRestored = file_get_contents('somefile.txt'); 
$data = unserialize($toBeRestored);