массивы — PHP File_Get_Contents ()

У меня очень длинный текстовый файл (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? Или что я могу использовать?

1

Решение

Вы можете использовать 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);
0

Другие решения

Да, вы можете использовать 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 за пределами первого вы должны достичь того, что вы пытаетесь довольно быстро.

0

По вопросам рекламы [email protected]