2013-03-24 3 views
0

Я пытаюсь разбить массив, если одна из строк имеет пустое значение. Мой массив экспортируется в csv и имеет несколько строк данных, если данные не завершены, он будет отправлен на незавершенный csv, и если он будет завершен, ему будет отправлено полное csv.Разбиение массива, если пустое значение

Это то, что моя структура массива выглядит как пустое поле на первой строке по электронной почте (эта строка должна быть разделена из массива:

array(2) { 
    [0]=> array(6) { 
     ["Username"]=> string(47) " STARRY NIGHT CINEMA - RISE OF THE GUARDIANS " 
     ["Email"]=> string(0) "" 
     ["Location"]=> string(1) "1" 
     ["Type"]=> int(1) 
     ["Title"]=> string(47) " STARRY NIGHT CINEMA - RISE OF THE GUARDIANS " 
     ["Description"]=> string(491) "the Tooth Fairy" 
    } 
    [1]=> array(6) { 
     ["Username"]=> string(26) "Maui Nui Botanical Gardens" 
     ["Email"]=> string(18) "[email protected]" 
     ["Location"]=> string(1) "1" 
     ["Type"]=> int(1) 
     ["Title"]=> string(26) "Maui Nui Botanical Gardens" 
     ["Description"]=> string(50) "Conserving Hawaiian Plants & Cultural Heritage" 
    } 
} 

Запись в мой файл CSV:

$fp = fopen('entries.csv', 'w'); 
    foreach ($entries as $fields) { 
     fputcsv($fp, $fields); 
    } 

    fclose($fp); 

    if (!copy("http://www.simonstaton.co.uk/entries.csv", "entries.csv")) { 
     echo ("failed to copy file"); 
    }; 

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

Simon

+0

Что вы подразумеваете под разделением из массива? Как бы выглядел ваш конечный результат? –

+0

Итак, вы хотите, чтобы 2 разных файла csv я мог понять? –

+0

Да, это правильно, также спасибо за ответ. Я хочу, чтобы данные разделили строки с пустыми полями. Затем оставьте в строках, которые завершены, и строки, которые он разделил, помещают в новый массив, где я могу отправить второй csv –

ответ

0

Чтобы отделить записи полным или неполным, вы можете открыть два файла для записи. Один из них должен содержать каждый.

// filenames 
$fn_complete = 'entries.csv'; 
$fn_incomplete = 'incomplete_entries.csv'; 

// file pointers 
$fp_complete = fopen($fn_complete, 'w'); 
$fp_incomplete = fopen($fn_incomplete, 'w'); 

// write CSVs 
foreach ($entries as $fields) { 
    if (in_array('', $fields)) 
     fputcsv($fp_incomplete, $fields); 
    else 
     fputcsv($fp_complete, $fields); 
} 

fclose($fp_complete); 
fclose($fp_incomplete); 

if (!copy('http://www.simonstaton.co.uk/' . $fn_complete, $fn_complete)) { 
    echo ('failed to copy file ' . $fn_complete); 
}; 
if (!copy('http://www.simonstaton.co.uk/' . $fn_incomplete, $fn_incomplete)) { 
    echo ('failed to copy file ' . $fn_incomplete); 
}; 
+0

Хорошо, похоже, что это сработает, позвольте мне попробовать –

+0

Хорошо, это просто похоже на то, что они записывают одни и те же данные на оба csv, а затем разделяют поле электронной почты от того места, где оно было пустым. –

+0

Это ничего не сломает. Если отсутствуют данные из записи, она помещает их в неполный файл. Если данные завершены, они помещаются в полный файл. Ни один из данных не изменяется. –

0

Вы можете проверить, если какой-либо из значений в массиве пуста, как это:

in_array('', $array) 

так, то вы можете сделать простой, если

if(in_array('', $array)) { 
    //Do whatever you have to do to slip your array. I don't understand exactly what you want the end result to look like . 
} 
+0

Спасибо за ответ, просто сейчас даю это. –

+0

Хорошо, просто играю с этим, однако как я могу заставить его удалить строку из массива? –

0

Первый пакет данных CSV в массив используя fgetcsv(). Затем используйте цикл для поиска "". Воплощения:

$row = 1; 
if (($resource = fopen("example.csv", "r")) !== false) { 
    while (($data = fgetcsv($resource, 1000, ",")) !== false) { 
     $num = count($data); 
     $row++; 
     for ($c=0; $c < $num; $c++) { 
      if ($data[$c] == "") { 
       // operate 
      } 
     } 
    } 
    fclose($handle); 
} 

Кстати, не используйте функцию split(). Используйте preg_split(). http://php.net/manual/en/function.fputcsv.php

+0

Данные уже находятся в массиве. Нет никаких оснований для чтения из CSV. –

Смежные вопросы