Объединение элементов многомерного массива

Статус
В этой теме нельзя размещать новые ответы.
А может стоит прочитать задачу ТС, а не просто гиппотезировать?
Речь ведётся о считывании всего файла, а при таком раскладе фиолетово как его читать целиком или построчно.

Прочитайте внимательно всю ветку и не мните себя модером (он и вам судья, между прочим ;) ). Мы не на экзамене, вы не препод, а я не ваш нерадивый студент. А так же просьба не тыкать. Мы незнакомы, а тыкать незнакомому человеку - разновидность хамства, ИМХО.

Насчет "речь ведётся о считывании всего файла" - раздел называется "PHP для начинающих" и ТС может просто не знать различных способов решения своей задачи - остановился на том какой заработал. Что плохого если люди с опытом подскажут ему лучшее решение? Тем более ТС не объяснил, зачем ему собирать строки именно в массив, а не в файл.

На самом деле тот вариант что он приводит далеко не лучший, потому как не будет работать на очень больших файлах или на очень их большом количестве в директории - массив всех строк всех файлов может просто занять всю оперативку. Я бы эту задачу вообще решал через файлы - читал построчно каждый текстовый файл папки и писал из него строки в единственный результирующий файл. Читал - именно через fgets().

Свое решение задачи ТС я привел постом выше. А реплика в конце моего решения ТС касалась постов

Вариантов несколько, например так.
PHP:
$f=fopen($file, 'r');
while (!feof($f)){
$line=fgets($f); // Вот твоя строка и делай с ней че угодно, хоть в массив хоть куда засунь...
}

Как раз fgets он и пытался избежать)
Ему нужен был вариант:
PHP:
$line = file_get_contents($f);
$ar = explode("тут перенос строки \n или \n\l ", $line);
 
Как раз fgets он и пытался избежать)
Ему нужен был вариант:
PHP:
$line = file_get_contents($f);
$ar = explode("тут перенос строки \n или \n\l ", $line);
Я че-то не заметил фразы про попытку избежать построчное считывание. Но в принципе если действительно нужно тупо загнать несколько файлов в один массив, то пофиг как это делать...
 
PHP:
if (is_dir($dir)) { // чтение файлов в массив
    if ($dh = opendir($dir)) {
        $data1 = array();
        while (($file = readdir($dh)) !== false) {
            if (filetype($dir . $file) == "file") // Если тип переменной - file
                $array = @file($dir . $file);
            foreach ($array as $string) {
                $data[] = $string; // каждую строку кладем в массив
            }
        }
        closedir($dh);
    }
}
У меня так получилось. Мб криво, но работает.
 
Я бы наверно так сделал.
PHP:
$d = dir($dir);
$array=array();
while (false !== ($e = $d->read())) {
if ($e=='.' || $e=='..' || !is_file($dir.$e)) continue;
$array=array_merge($array, file($dir.$e));
}
$d->close();
 
PHP:
if (is_dir($dir)) { // чтение файлов в массив
    if ($dh = opendir($dir)) {
        $data1 = array();
        while (($file = readdir($dh)) !== false) {
            if (filetype($dir . $file) == "file") // Если тип переменной - file
                $array = @file($dir . $file);
            foreach ($array as $string) {
                $data[] = $string; // каждую строку кладем в массив
            }
        }
        closedir($dh);
    }
}
У меня так получилось. Мб криво, но работает.

А почему не через файлы, как я предлагал в последнем посте? Ведь массив data - в оперативке и хранит содержимое каждого файла. Если файлов много и если они большие, в оперативке он просто не поместиться.
 
А почему не через файлы, как я предлагал в последнем посте? Ведь массив data - в оперативке и хранит содержимое каждого файла. Если файлов много и если они большие, в оперативке он просто не поместиться.
Ну я твой пост прочитал когда уже всё сделал :) Принял его на заметку, пасиб.
 
Массивы обычно используют когда требуется "быстрый" доступ к отдельным строкам, и чтоб все строки были "под рукой". Если этих условий нет, можно такие данные держать в файлах, ИМХО.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху