SplFileObject::fputcsv

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

SplFileObject::fputcsv β€” ЗаписываСт массив ΠΏΠΎΠ»Π΅ΠΉ ΠΊΠ°ΠΊ CSV-строки

ОписаниС

public function SplFileObject::fputcsv(
Β Β Β Β array $fields,
Β Β Β Β string $separator = ",",
Β Β Β Β string $enclosure = "\"",
Β Β Β Β string $escape = "\\",
Β Β Β Β string $eol = "\n"
): int|false

ΠœΠ΅Ρ‚ΠΎΠ΄ записываСт массив ΠΏΠΎΠ»Π΅ΠΉ fields Π² Ρ„Π°ΠΉΠ» ΠΊΠ°ΠΊ CSV-строку.

Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

fields

Массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

separator

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ устанавливаСт символ-Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ символ. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π²Π½ΠΎ запятой β€” , ΠΈΠ»ΠΈ символу, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ установили ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ SplFileObject::setCsvControl().

enclosure

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ устанавливаСт символ-ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² полях ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ символ. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π²Π½ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ΅ β€” " ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ установили ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ SplFileObject::setCsvControl().

escape

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ устанавливаСт символ экранирования ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π΅ большС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ символа. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π²Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌΡƒ ΡΠ»Π΅ΡˆΡƒ \ ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ установили ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ SplFileObject::setCsvControl(). ΠŸΡƒΡΡ‚Π°Ρ строка "" ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ экранирования.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅

Π”ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ символа enclosure Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… символом Π³Ρ€Π°Π½ΠΈΡ† Π²Π΅Ρ€Π½Ρ‘Ρ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π·Π±ΠΎΡ€Π° Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΠ΄ΠΈΠ½ символ enclosure. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ escape Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ: ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ символа escape ΠΏΠ΅Ρ€Π΅Π΄ символом enclosure ΠΎΠ±Π° символа вСрнутся Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π·Π±ΠΎΡ€Π°, поэтому со стандартными значСниями ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² CSV-строка Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ "a""b","c\"d" разбСрётся Π½Π° Π΄Π²Π° поля β€” a"b ΠΈ c\"d.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅

Начиная с PHP 8.4.0 ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ escape, Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ потрСбуСтся ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ явно: ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ SplFileObject::setCsvControl().

eol

ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ eol устанавливаСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ†Π° строки.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅

Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π² CSV-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΈΠ½ΠΎΠ³Π΄Π° пСрСстаёт ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ стандарту » RFC 4180 ΠΈΠ»ΠΈ Π½Π΅ Π²Ρ‹Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ с PHP-функциями для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с CSV-строками, Ссли для символа экранирования escape ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ отличаСтся ΠΎΡ‚ пустой строки "". Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° escape β€” "\\", поэтому Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡƒΡΡ‚ΡƒΡŽ строку. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ измСнят Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΉ вСрсии PHP, Π½ΠΎ Π½Π΅ Ρ€Π°Π½ΡŒΡˆΠ΅ PHP 9.0.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

ΠœΠ΅Ρ‚ΠΎΠ΄ заэкранируСт символ ограничитСля ΠΏΠΎΠ»Π΅ΠΉ enclosure ΠΏΡƒΡ‚Ρ‘ΠΌ удвоСния, Ссли ΠΏΠΎΠ»Π΅ содСрТит символ ограничитСля, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ прямо ΠΏΠ΅Ρ€Π΅Π΄ символом ограничитСля Π½Π΅ стоит символ экранирования escape.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния

ΠœΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ строки, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ записал, ΠΈΠ»ΠΈ false, Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ошибка.

Ошибки

Ѐункция выбрасываСт ΠΎΡˆΠΈΠ±ΠΊΡƒ ValueError, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° separator ΠΈΠ»ΠΈ enclosure Π½Π΅ Ρ€Π°Π²Π½ΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π±Π°ΠΉΡ‚Ρƒ.

Ѐункция выбрасываСт ΠΎΡˆΠΈΠ±ΠΊΡƒ ValueError, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° escape Π½Π΅ Ρ€Π°Π²Π½ΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π±Π°ΠΉΡ‚Ρƒ ΠΈΠ»ΠΈ пустой строкС.

Бписок измСнСний

ВСрсия ОписаниС
8.4.0 Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π΅Π· явной ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° escape устарСл.
8.1.0 Π”ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ eol.
7.4.0 ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ escape Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡƒΡΡ‚ΡƒΡŽ строку для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° экранирования.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #1 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ записи массива ΠΏΠΎΠ»Π΅ΠΉ ΠΊΠ°ΠΊ строки Π² CSV-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ SplFileObject::fputcsv()

<?php

$list = array (
    array('aaa', 'bbb', 'ccc', 'dddd'),
    array('123', '456', '789'),
    array('"aaa"', '"bbb"')
);

$file = new SplFileObject('file.csv', 'w');

foreach ($list as $fields) {
    $file->fputcsv($fields);
}

?>

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ записываСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки Π² Ρ„Π°ΠΉΠ» file.csv:

aaa,bbb,ccc,dddd
123,456,789
"""aaa""","""bbb"""

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

  • SplFileObject::fgetcsv() - ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ строку ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ указатСля ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠΎ CSV-полям
  • SplFileObject::setCsvControl() - УстанавливаСт символы раздСлитСля, ограничитСля ΠΈ экранирования для CSV-ΠΏΠΎΠ»Π΅ΠΉ
  • SplFileObject::getCsvControl() - ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ символы раздСлитСля, ограничитСля ΠΈ экранирования CSV-ΠΏΠΎΠ»Π΅ΠΉ
  • fputcsv() - Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ строку Π² CSV-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΈ записываСт строку Π² Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ
  • fgetcsv() - ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ строку ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ указатСля ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠΎ CSV-полям
  • str_getcsv() - Π Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ CSV-строку Π² массив
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π΅Ρ‰Ρ‘ Π½Π΅ добавляли примСчания для страницы