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
convert array into .txt file
提问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 TRUE
as 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:
如果这不清楚,这里有一个说明:
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_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
.
要将其写入文件,您可以将其组装到一个字符串变量中,然后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);