2016-10-12 2 views
0

обрабатывают файл CSV и когда все сказано и сделано, я в конечном итоге что-то вроде этогоФорматирование данных массива

Array 
(
    [0] => Array 
     (
      [Title] => 11AA002 
      [Supplier Name] => Supplier A 
      [Supplier Name2] => 
      [Effects2] => Bass 
      [Effects3] => Percussion 
      [Effects4] => Jazz/Piano 
      [Effects5] => Drums 
      [Components2] => Kit 
      [Components3] => 
      [Components4] => 
      [Technology Areas2] => Something 
      [Technology Areas3] => 
      [Technology2] => Cold 
      [Technology3] => Hot 
      [Technology4] => 
      [Technology5] => 
      [Briefs & Brands2] => 
      [Briefs & Brands3] => 
     ) 
    //Other elements  
) 

То, что я сейчас пытаюсь сделать, это процесс массив данных. Первое, что я пытаюсь сделать, - удалить все, что имеет пустое значение. Для этого я делаю следующее:

foreach($csvArray as $row) { 
    foreach($row as $key => $value) { 
     if(empty($value)) { 
      unset($key);  
     } 
    } 
} 

Это, похоже, не удаляет элемент из массива. Поэтому в приведенном выше примере вещи, такие как имя поставщика2, должны быть удалены.

Есть еще несколько вещей, которые я пытаюсь разобраться, но не знаю, с чего начать. Название должно всегда находиться в следующем формате YYSUPCCC, где YY - Год, SUP - это первые 3 буквы первого поставщика, а CC - это счет. Таким образом, приведенный выше пример неверен, он должен быть 16SUP001. Следующий элемент массива, у которого есть тот же поставщик, будет 002.

Возможно ли подобное? Любые советы приветствуются.

Благодаря

+0

Вы получили ответ, чтобы исправить проблему 'unset()', но вам придется публиковать новые вопросы для любых других проблем, с которыми вы сталкиваетесь. – JazZ

ответ

0

Вы должны сбросить ключ из исходного массива:

foreach($csvArray as $key1 => $row) { 
    foreach($row as $key => $value) { 
     if(empty($value)) { 
      unset($csvArray[$key1][$key]);  
     } 
    } 
} 

Надеется, что это помогает.

+0

как вы получаете данные $ row? –

+0

@RubabHossain Спасибо. Я исправил опечатку. – JazZ

+0

Есть ли способ проверить Заголовок, чтобы он был в правильном формате? Спасибо –

1

unset ($ key);

Вы пытаетесь отключить переменную, названную после ключа (которая не действует, поскольку такая переменная не существует), а не массив, как вы хотели. Чтобы сделать последнее, вы должны работать над своим исходным массивом. т.е.:

foreach($csvArray as $k=>$row) { 
    foreach($row as $key => $value) { 
     if(empty($value)) { 
      unset($csvArray[$k][$key]);  
     } 
    } 
} 

вместо этого.

+0

Отличный ответ !!! – JazZ

+0

Lol, downvote ... StackOverflow серьезный бизнес :) –

+0

Просто будь честным, пожалуйста. Это точно тот же ответ, что и мой ... Мне нужно 1000 человек, чтобы увидеть, кто сбрасывает мои сообщения. ;) – JazZ

2

Использование ссылки & для $row изменить массив непосредственно, просто фильтровать:

foreach($csvArray as &$row) { 
    $row = array_filter($row); 
} 

Вот и все.

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