Переход от CSV к массивам и использовать его в функции

Я работал с этим так долго, что теперь я готов сдаться и сделать это вручную, но поскольку я потратил так много часов на это, мне действительно нужно это сделать.

У меня есть CSV-файл с информацией, которая необходима для создания группы в BuddyPress

Я использую функцию из bp-groups.php (http://pastie.org/1430135) с этим сценарием:

<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
include "../../../wp-load.php";

$groups = array();

if (($handle = fopen("groupData.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
        $group = array('group_id'    => $data[0],
                'creator_id'  => '1',
                'name'        => $data[1], 
                'description' => $data[2], 
                'slug' => groups_check_slug(sanitize_title(esc_attr($data[3]))), 
                'date_created' => gmdate( "Y-m-d H:i:s" ), 
                'status' => 'public', 
                'enable_forum' => '1'
 );
        $groups[] = $group;
    }   
    fclose($handle);
}

foreach ($groups as $group) {
    groups_create_group($group);
} 

print_r($groups);
?>

Из print_r я получаю:

Array
(
    [0] => Array
    (
        [group_id] => 2
        [creator_id] => 1
        [name] => GroupName1 
        [description] => Interesting description1 
        [slug] => groupname1 
        [date_created] => 2011-01-05 02:33:54 
        [status] => public
        [enable_forum] => 1
    )
    [1] => Array
    (
        [group_id] => 3 
        [creator_id] => 1
        [name] => GroupName2
        [description] => Interesting description2
        [slug] => groupname2
        [date_created] => 2011-01-05 02:33:54
        [status] => public
        [enable_forum] => 1
    )
)

Но цель состоит в том, чтобы создавать группы из csv-файла, но это не так. Что я делаю неправильно?

1 ответ

По моему опыту, CSV-контент PHP работает не очень хорошо, или, ну, он хорошо работает только с файлами определенного формата. Файлы CSV могут иметь разные форматы в зависимости от того, что вы использовали для создания, например, Excel. Возможно, вам придется создать собственный синтаксический анализатор, просто используя fgets(), а не fgetcsv(), а затем разбить каждую строку на символе-разделителе, что в значительной степени и должно делать fgetcsv.

Кроме того, вы можете рассмотреть что-то вроде

while(!feof($handle))
{
    $data = fgetcsv($handle, 1000, ";");
    //stuff
}
Другие вопросы по тегам