php текстовый файл в массив массивов - PullRequest
0 голосов
/ 06 января 2020

У меня есть текстовый файл, содержащий

a b c 

a c

b

Я хочу прочитать текстовый файл и преобразовать его в массив массивов, как это

  array(
        array('a', 'b', 'c'),
        array('a', 'c'),
        array('b'));

Я хочу разбить каждую строку в массиве и каждое слово в индексе в массиве

я пробовал этот код, но он разбивает только каждую строку в массиве, я хочу каждое слово в массиве строки

<code>$file="140724.txt";
$fopen = fopen($file, r);
$fread = fread($fopen,filesize($file));
fclose($fopen);
$remove = "\n";
$split = explode($remove, $fread);
$array[] = null;
$tab = "\t";
foreach ($split as $string)
{
    $row = explode($tab, $string);
    array_push($array,$row);
}
echo "<pre>";
print_r($array);
echo "
";

я получил этот результат

Array

(

    [0] => 

    [1] => Array
        (
            [0] => a b c
        )

    [2] => Array
        (
            [0] => a b
        )

    [3] => Array
        (
            [0] => c
        ))

Ответы [ 5 ]

3 голосов
/ 06 января 2020

Вы можете немного уменьшить код, используя некоторые встроенные функции.

Использование file() с соответствующими флагами будет считывать файл, игнорируя все пустые строки и вернуть массив данных.

Затем использовать array_map() вместе с explode() для обработки этого массива и разделения его на отдельные части в строке ...

$fileName = "140724.txt";
$file = file($fileName, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES );
$output = array_map(function($line) { return explode("\t", $line); }, $file);

будет производить

Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
            [2] => c
        )

    [1] => Array
        (
            [0] => a
            [1] => c
        )

    [2] => Array
        (
            [0] => b
        )

)
0 голосов
/ 06 января 2020
$fileData = file('1.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

$result = [];
foreach ($fileData as $row) {
    $splitRow = str_getcsv($row, ' ');
    $result[] = $splitRow;
}

echo '<pre>';
print_r($result);
$fileData = file('1.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

$result = array_map(function ($row) {
    return str_getcsv($row, ' ');
}, $fileData);

echo '<pre>';
print_r($result);
0 голосов
/ 06 января 2020

Это даст идеальный вывод без пустого массива. Спасибо позже.

$file="140724.txt";
$fopen = fopen($file, 'r');
$fread = fread($fopen,filesize($file));
fclose($fopen);
$remove = "\n";
$split = explode($remove, $fread);

$custom_array = array();
$x = 0;
foreach ($split as $value) {
    $value = trim($value);
    if($value != '' || $value != null){
        $inside_explode = explode(" ", $value);
        $custom_array[$x] = $inside_explode;
        $x++;
    }


}
print_r($custom_array);
0 голосов
/ 06 января 2020

Есть несколько ошибок.

Первый - инициализируйте $array var как $array = [];, а не $array[] = null;.

Во-вторых, вы можете использовать fgetcsv что будет лучше.

Наконец, я думаю, что разделителем является (пробел), а не \t.

Рассмотрим:

$handle = fopen($file, "r");
while (($data = fgetcsv($handle, 1000, " ")) !== FALSE) {
    $arr[] = $data;
}
0 голосов
/ 06 января 2020

Попробуйте вот так.

<code>$file="140724.txt";
$fopen = fopen($file, r);
$fread = fread($fopen,filesize($file));
fclose($fopen);
$remove = "\n";
$split = explode($remove, $fread);
$array = array();
$tab = " ";
foreach ($split as $string)
{
    $array[] = explode($tab, $string);
}
echo "<pre>";
print_r($array);
echo "
";

Надеюсь, это поможет вам.

...