Разбор значений CSV в карту с помощью PHP - PullRequest
1 голос
/ 21 сентября 2011

Если мой текстовый файл

Jack Jones;batter;100;
Bobby Brown;bowler;90;

Я знаю, как получить их в массив, но как мне получить их в массив с ключами? Например, после прочтения текстового файла мой массив будет -

$player1 = ('name' => 'Jack Jones', 'skill' => 'batter', 'points' => '100');
$player2 = ('name' => 'Bobby Brown', 'skill' => 'bowler', 'points' => '90');

// therefore -
echo $player1['name'];  #This would output the name 'Jack Jones'

Ответы [ 2 ]

6 голосов
/ 21 сентября 2011

вы не можете напрямую, так как в текстовом файле нет информации об именах столбцов.но если вы знаете, как это получить:

$player = (0 => 'Jack Jones', 1 => 'batter', 2 => '100');

и имена столбцов фиксированы, вы можете настроить второй массив, содержащий ключи:

$column_names = array('name','skill','points');

, а затем использовать array_combine , чтобы получить желаемый результат:

$player = array_combine($column_names, $player);
echo $player['name'];  // 'Jack Jones'
1 голос
/ 21 сентября 2011

Как вы анализируете файл CSV?Используете ли вы Class CsvReader?

В этом случае вы можете сделать что-то вроде:

Class CsvManager
{

function __construct()
{
$this->reader = new CsvReader();
$this->reader->SetCsvEncoding('yourEncoding');
$this->reader->SetDelimiter(';');
}

function Run($inString)
{
$this->reader->ParseCsv($inString,array(&$this, 'CsvCallback'), NULL);
}

function CsvCallback($inCsvArray)
{
$newArray = array();
$newArray['name'] = $inCsvArray[0];
$newArray['skill'] = $inCsvArray[1];
$newArray['points'] = $inCsvArray[2];
}

$file = pathToYourCsvFile.csv
$manager = new CsvManager();
$manager->Run($file);

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

...