views:

74

answers:

3

Possible Duplicate:
Convert array into csv

Hi,

How to convert array into .txt file?

This is my array:

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  A: 

Maybe what you want is fputcsv ?

MatTheCat
Not with a structure that complex.
Ignacio Vazquez-Abrams
So what structure do you want ?
MatTheCat
+3  A: 

If you want to save a variable in a text file, you could use the serialize() / unserialize() functions for that:

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

And restore it...

$toBeRestored = file_get_contents('somefile.txt');
$data = unserialize($toBeRestored);
Lekensteyn
+2  A: 

If you want it to be parseable, you can use

  • var_export — Outputs or returns a parsable string representation of a variable

Example

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

If you want it to look like in your question, you pass TRUE as the second param to print_r:

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

EDIT you mentioned in the comments that you want the array to be transformed to a CSV file. This is more difficult. Your array is nested, while a CSV file is basically a single dim array, e.g.

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

would be equivalent to a CSV file where the first rows is the array keys and the second row the values.

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

The single dims arrays are usually inside another array, so you have a collection like this:

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

Here, you'd have to get the keys first and then fetch only the values from the array for the subsequent lines, e.g.

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

The problem is, your array is nested even deeper. Where would you put the address array? The only feasible approach would be to go over the array and fetch only those keys and values that contain a scalar type and linearize any nested arrays, e.g.

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

has to be turned into

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

In case this isnt clear, here is an illustration what goes where:

Flattening a Multidimensional Array for use in a CSV file

Luckily, this can be achieved with Iterators:

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

The above code should output the described format. See http://www.ideone.com/I70dD for an example.

To write this to a file, you can either assemble this to a string variable and then file_put_contents it all at once or you use a filepointer and write it line by line. If you dont implode it but iterate over the $flattened array, you can also use fputcsv.

Gordon
Surely you don't want to pass true as the second argument in var_export as this exports it to a vairable rather than outputting the contents?
Alex
@Alex I want to pass it to `file_put_contents` so it can be written to a file. For that, I have to use `TRUE`.
Gordon
@gordon, thank you for your post it helps me a lot but theres a little problem with your code. It appears the the [countryCode] => AU does not appear instead it will replace the [countryCode] => PH from the array of product. Heres what i get: 156456;110631;testing2;15656;PH;2;.... etc315456;321321;testing;3213;PH;2.... etc
rayss
@rayss that's because `iterator_to_array` assembles the array it returns in memory first and keys from a nested level will overwrite higher level keys of the same name. I have updated the code. Now it shouldnt do that anymore. If you want more control over the Iteration, you might also want to have a look at http://stackoverflow.com/questions/2207599/multidimensional-array-iteration/2207739#2207739
Gordon
@Gordon, thank you so much its really works. thanks for the help. I learned a lot from you :)
rayss