Возможный дубликат:
Преобразование массива в csv
Здравствуй,
Как преобразовать массив в .txt-файл?
Это мой массив:
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 ) ) ) ) ) )
Если вы хотите, чтобы он был разобран, вы можете использовать
var_export
– var_export
или возвращает синтаксическое строковое представление переменной пример
file_put_contents('array.txt', var_export($array, TRUE));
Если вы хотите, чтобы это было похоже на ваш вопрос, вы передаете TRUE
как второй параметр print_r
:
file_put_contents('array.txt', print_r($array, TRUE));
EDIT вы упомянули в комментариях, что вы хотите, чтобы массив был преобразован в CSV-файл. Это сложнее. Ваш массив вложен, в то время как CSV-файл представляет собой в основном одномерный массив, например
array('k1' => 'v1', 'k2' => 'v2', ... , 'kn' => 'vn');
будет эквивалентен CSV-файлу, где первые строки – это ключи массива, а вторая строка – значения.
k1; k2; ...; kn v1; v2; ...; vn
Единственные массивы dims обычно находятся внутри другого массива, поэтому у вас есть такая коллекция:
array( array('k1' => 'v1', 'k2' => 'v2', ... , 'kn' => 'vn'), array('k1' => 'v1', 'k2' => 'v2', ... , 'kn' => 'vn') );
Здесь вам нужно сначала получить ключи, а затем извлечь только значения из массива для последующих строк, например
k1; k2; ...; kn v1; v2; ...; vn v1; v2; ...; vn
Проблема в том, что ваш массив вложен еще глубже. Где бы вы поместили массив адресов ? Единственный возможный подход состоял бы в том, чтобы пройти через массив и извлечь только те ключи и значения, которые содержат скалярный тип, и линеаризовать любые вложенные массивы, например
array( array('k1' => 'v1', 'k2' => 'v2', ... , 'kn' => array( 'skn' => 'svn' ) ), array('k1' => 'v1', 'k2' => 'v2', ... , 'kn' => array( 'skn' => 'svn' ) ), );
должен быть превращен в
k1; k2; ...; skn v1; v2; ...; svn v1; v2; ...; svn
В случае, если это не ясно, вот иллюстрация, что происходит:
К счастью, это может быть достигнуто с помощью итераторов:
$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); }
Вышеприведенный код должен выводить описанный формат. См. http://www.ideone.com/I70dD для примера.
Чтобы записать это в файл, вы можете собрать его в строковой переменной, а затем file_put_contents
все это сразу или использовать файл-указатель и написать его по строкам. Если вы не implode
его, а выполните итерацию по $flattened
fputcsv
массиву, вы также можете использовать fputcsv
.
Если вы хотите сохранить переменную в текстовом файле, вы можете использовать функции serialize()
/ unserialize()
для этого:
$data = array(1, 2, 3, ''); $toBeSaved = serialize($data); file_put_contents('somefile.txt', $toBeSaved);
И восстановить его …
$toBeRestored = file_get_contents('somefile.txt'); $data = unserialize($toBeRestored);
Может, вы хотите fputcsv ?