Переход от 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
}