2016-04-17 1 views
2

Итак, я пишу простую функцию экспорта csv в php, но у меня есть небольшая проблема, когда дело доходит до заголовков и массива значений.новый массив с только значениями в php

У меня есть предустановленный массив из столбцов, который пользователь может экспортировать, то есть $exportHeaders. Итак, что я пытаюсь сделать, вместо ввода каждого значения для $row['value for column'] Я хочу создать способ сделать новый массив для вставки вместо $row. Однако, когда я делаю новый массив, который $newExportHeader[] в моем случае, я в конечном итоге с массивом, который выглядит следующим образом (с ключом и значением):

$newExportHeader = array(
0 => $row['first_name'], 
1 => $row['last_name'], 
2 => $row['email'], 
); 

Но я нужен массив, который не имеет связанный с ним. Так что мой вопрос: есть ли способ, чтобы сделать массив на лету без ключей в нем, только значения

protected $exportHeaders = array(
    "first_name", "last_name", "email", "street", "city", "province", "postal_code", "phone_1", 
    "phone_2", "created_at", "updated_at" 

); 

Это в настоящее время работает:

foreach ($this->user->clients()->get() as $row) { 
      fputcsv($handle, array(row['first_name'], row['last_name'], row['email'])); 
     } 

Один из вариантов, что я был играя с - не работает:

foreach ($this->user->clients()->get() as $row) { 
     foreach ($this->exportHeaders as $header) { 
       $newExportHeader[] = $row[$header]; <-Problem Area 
      } 
      fputcsv($handle, array_values($newExportHeader)); 
     } 

Любая помощь приветствуется.

+1

Массив без ключей, Doh !! Что это? Я думаю, вы могли бы назвать это строкой с разделителями-запятыми – RiggsFolly

+0

PHP не разрешает массивы без ключей. Если вы создадите массив «без ключей», как этот '$ foo = array (« один »,« два »,« три »);', PHP автоматически индексирует его так, что '$ foo [0] ===" один "'. Таким образом, массив «без ключей» совпадает с индексированным массивом, начинающимся с 0. – mkasberg

ответ

1

На основе вашего рабочего кода, и гадать, что вы собираетесь на основе вашего неработающего кода,

Попробуйте это:

foreach ($this->user->clients()->get() as $row) { 
    $transformedRow = array(); // Create a new array for the row, based on new headers. 
    foreach($this->exportHeaders as $header) { 
     $transformedRow[] = row[$header]; // Add to the new array for the row in the correct order. 
    } 
    fputcsv($handle, $transformedRow); // Add row to the csv 
} 

В исходном коде, вы, кажется, есть проблема в том, что вы не повторно инициализируете $newExportHeader каждую итерацию внешнего цикла.

+0

Вы мужчина-спасатель! Спасибо. Работал как шарм. Я два дня стучал головой о стол. Это сохранит повторяющийся код в других частях программы. – max234435