Предложения по разбору этих данных - PullRequest
2 голосов
/ 06 октября 2010

Итак, у меня есть огромный файл имен, который нужно разбить на несколько столбцов для Excel.

Так что я использую PHP для анализа этого, поэтому вот часть примера:

Dr. Johnny Apple Seed
Ms. A. P. Oranges
Mrs. Purple Cup

По сути, я хочу поместить это в массив.Я использовал fopen, fget и explode.Проблема в том, что если я использую Explode, некоторые массивы не будут иметь согласованных элементов.Например, у первого будет всего 4 (Dr, Johnny, Apple, Seed), у третьего - только три.Как бы я добавил четвертый пустой элемент между пурпуром и чашкой?или есть лучший способ?

Это мой код:

<code>$fp = fopen($filename,"r");

if ($fp) { 
   while (!feof($fp)) { 
  $data = fgets($fp, filesize($filename));
  $contents[] = explode(" ", $data) . 
   } 

} 

fclose($fp);
echo "<pre>";
var_dump($contents);
echo "
";

Желаемый вывод:

  array(4) {
    [0]=>
    string(4) "Mrs."
    [1]=>
    string(4) "Purple"
    [2]=>
    string(1) " "
    [3]=>
    string(8) "Cup"

array(4) {
    [0]=>
    string(3) "Dr."
    [1]=>
    string(6) "Johnny"
    [2]=>
    string(5) "Apple"
    [3]=>
    string(4) "Seed"

Ответы [ 4 ]

1 голос
/ 06 октября 2010

Попробуйте (не тестировал, но должен работать):

<code>// Define the clean array
$clean_array = array();

$fp = fopen($filename,"r");
if ($fp) { 
    while (!feof($fp)) { 
        $data = fgets($fp, filesize($filename));
        // use trim() on $data to avoid empty elements
        $contents = explode(" ", trim($data));

        if (count($contents) == '3') {
            // Copy last element to new last element
            $contents[] = $contents[2];
            // Clear the old last element
            $contents[2] = ' ';
        }
        $clean_array[] = $contents;
    } 
} 
fclose($fp);

echo '<pre>';
print_r($clean_array);
echo '
';

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

1 голос
/ 06 октября 2010

Это должно работать:

<code><?php
$new_array = array();
$fp = fopen($filename, "r");
if ($fp) {
    while (!feof($fp)) {
        $data = fgets($fp, filesize($filename));
        $contents[] = explode(" ", $data);
    }
}
foreach ($contents as $content) {
    if (count($content) != 4) {
        $content[3] = $content[2];
        $content[2] = " ";
        $new_array[] = $content;
    }
    else {
        $new_array[] = $content;
    }
}
fclose($fp);
echo "<pre>";
var_dump($new_array);
echo "
"; ?>
0 голосов
/ 06 октября 2010

Я использовал array_splice, вот мое решение:

<?php

$filename = "excel-names.txt";
$fp = fopen($filename,"r");

if ($fp) { 
   while (!feof($fp)) { 
        $data = fgets($fp, filesize($filename));
        $contents[] = explode(" ", $data, 4);
    }    
} 

fclose($fp);

foreach( $contents as $a) {
    $arrayCount = count($a);

    if( $arrayCount == 3 ) {
        array_splice($a, 2, 0, " ");
    }
    if( $arrayCount == 2 ) {
        array_splice($a, 0, 0, " ");
        array_splice($a, 2, 0, " ");
    }
}

?>
0 голосов
/ 06 октября 2010

Если они являются новыми строками, вы можете просто использовать "\ n" как $ needle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...