преобразовать массив в .txt-файл

Возможный дубликат:
Преобразование массива в 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_exportvar_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 

    В случае, если это не ясно, вот иллюстрация, что происходит:

    Сглаживание многомерного массива для использования в файле CSV

    К счастью, это может быть достигнуто с помощью итераторов:

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