convertir matriz en archivo .txt

Posible duplicado:
Convertir matriz en csv

Hola,

¿Cómo convertir una matriz en un archivo .txt?

Esta es mi matriz:

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

Si quieres que sea parseable, puedes usar

  • var_export – Emite o devuelve una representación de cadena procesable de una variable

Ejemplo

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

Si quieres que se vea como en tu pregunta, pasas TRUE como el segundo param para print_r :

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

EDITAR usted mencionó en los comentarios que desea que la matriz se transforme en un archivo CSV. Esto es mas dificil Su matriz está anidada, mientras que un archivo CSV es básicamente una única matriz de luces, por ejemplo

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

sería equivalente a un archivo CSV donde las primeras filas son las teclas de matriz y la segunda fila los valores.

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

Las matrices de dims individuales suelen estar dentro de otra matriz, por lo que tiene una colección como esta:

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

Aquí, primero debe obtener las claves y luego buscar solo los valores de la matriz para las líneas siguientes, por ejemplo

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

El problema es que tu matriz está anidada aún más. ¿Dónde colocarías la matriz de direcciones ? El único enfoque factible sería revisar el conjunto y obtener solo aquellas claves y valores que contengan un tipo escalar y linealizar cualquier conjunto nested, por ejemplo

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

tiene que ser convertido en

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

En caso de que esto no esté claro, aquí hay una ilustración de lo que va donde:

Aplanar una matriz multidimensional para usar en un archivo CSV

Afortunadamente, esto se puede lograr con Iteradores:

 $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); } 

El código anterior debe dar como resultado el formato descrito. Ver http://www.ideone.com/I70dD para un ejemplo.

Para escribir esto en un archivo, puede ensamblarlo en una variable de cadena y luego file_put_contents todo a la vez o usar un tipo de archivo y escribirlo línea por línea. Si no implode pero itera sobre la matriz $flattened , también puede usar fputcsv .

Si desea guardar una variable en un archivo de texto, puede usar las funciones serialize() / unserialize() para eso:

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

Y restaurarlo …

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

Tal vez lo que quieres es fputcsv ?