php 将数组转换为 .txt 文件

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3975641/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 11:37:11  来源:igfitidea点击:

convert array into .txt file

phparraysfileformattext-files

提问by rayss

Possible Duplicate:
Convert array into csv

可能的重复:
将数组转换为 csv

Hi,

你好,

How to convert array into .txt file?

如何将数组转换为 .txt 文件?

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
                                        )

                                )

                        )

                )

        )

)

回答by Gordon

If you want it to be parseable, you can use

如果你希望它是可解析的,你可以使用

  • var_export— Outputs or returns a parsable string representation of a variable
  • var_export— 输出或返回变量的可解析字符串表示

Example

例子

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


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

如果您希望它看起来像您的问题,TRUE则将第二个参数传递给print_r

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


EDITyou 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.

编辑您在评论中提到您希望将数组转换为 CSV 文件。这更难。您的数组是嵌套的,而 CSV 文件基本上是一个单一的暗数组,例如

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.

将相当于一个 CSV 文件,其中第一行是数组键,第二行是值。

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

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

单个 dims 数组通常位于另一个数组中,因此您有一个像这样的集合:

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 addressarray? 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

展平多维数组以在 CSV 文件中使用

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/I70dDfor an example.

上面的代码应该输出描述的格式。有关示例,请参见http://www.ideone.com/I70dD

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

要将其写入文件,您可以将其组装到一个字符串变量中,然后file_put_contents一次全部完成,或者您使用文件指针并逐行写入。如果你不implode这样做而是遍历$flattened数组,你也可以使用fputcsv.

回答by Lekensteyn

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

如果要将变量保存在文本文件中,可以使用serialize()/unserialize()函数:

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

回答by MatTheCat

Maybe what you want is fputcsv?

也许你想要的是fputcsv