У меня очень длинный текстовый файл (300 000 символов) с данными, разделенными запятой.
ааа, БББ, ссс, ддд, еее, FFFF, гг, HHHHH, II, J, kkkkkkkkkkkkk, л, мм
Я хотел бы заполнить данные в строку, но по частям. Например, первые 100 частей данных, затем следующие. Обратите внимание, что длина каждого фрагмента данных непредсказуемо изменяется.
Есть ли быстрый способ сделать это? Я хотел бы заполнить данные в строку по частям, потому что я не хочу использовать слишком много памяти одновременно. Так что вроде как петля:
for ($counter = 0; $counter < $somenumber; $counter++) {
// (1) extract counter-th 100 pieces of data to string
// (2) explode string with , as delimiter so I can obtain an array
// (3) do something to this array
}
Могу ли я использовать file_get_contents? Или что я могу использовать?
Вы можете использовать fread для чтения пакета файла, например, 8192Byte.
<?php
$handle = fopen("filepath", "r");
$content = '';
$flag = false;
while (!feof($handle)) {
$content .= fread($handle, 8192);
if(substr($content, -1) == ',')
$flag = true;
$array = explode(',', $content);
if($flag)
{
$content = '';
}
else
{
$content = end($array);
$array = array_pop($array);
}
}
$array[] = $content;
fclose($handle);
Да, вы можете использовать file_get_contents
, После этого вы можете использовать explode
http://php.net/manual/de/function.explode.php взорвать ваш файл на несколько частей.
В вашем случае используйте:
$result = explode(",", $your_file_content);
Вы получите массив, в $result[0]
будет первая часть до вашей первой запятой, в $result[1]
будет вторым и тд. Значит, если у вас есть что-то вроде:
ааа, ГЭБ, ссс, ддд, еее
Тогда у вас будет:
$result[0] // aaa
$result[1] // bbb
$result[2] // ccc
$result[3] // ddd
$result[4] // eee
После этого вы можете использовать простой вид, чтобы добавить вместе в строку. Например что-то вроде:
for($a = 0; $a < 101; $a++) {
$string .= $result[$a];
}
Конечно, это не сработает, так как ваш $result
массив будет иметь более 100 записей, но со вторым for-loop
за пределами первого вы должны достичь того, что вы пытаетесь довольно быстро.