2012-03-13 2 views
-1

У любого есть идеи по наилучшему способу преобразования Doctrine_Collection в CSV на основе определенного имени столбца?Doctrine_Collection __toString() тип функциональности

Пример массива:

array 
    0 => 
    array 
    'id' => string '2' (length=1) 
    'name' => string 'metallica' (length=14) 
    'created_at' => string '2011-09-02 23:15:15' (length=19) 
    'updated_at' => string '2011-10-05 02:51:23' (length=19) 
    1 => 
    array 
     'id' => string '7' (length=1) 
     'name' => string 'coal chamber' (length=13) 
     'created_at' => string '2011-09-06 00:24:02' (length=19) 
     'updated_at' => string '2011-10-05 02:51:11' (length=19) 
    2 => 
    array 
     'id' => string '14' (length=2) 
     'name' => string 'slayer' (length=14) 
     'created_at' => string '2011-10-05 02:48:58' (length=19) 
     'updated_at' => string '2011-10-05 02:50:15' (length=19) 

Я хотел бы закончить с:

string 'metallica,coal chamber,slayer' (length=29) 

Теперь я мог бы легко сделать это с чем-то вроде:

foreach ($this->getBands()->toArray() as $array) { 
    $names[] = $array['name']; 
} 

var_dump(implode(',', $names)); 

Но я d хотел бы посмотреть, есть ли более элегантное решение, используя встроенные методы, предоставляемые классом Doctrine_Collection.

ответ

0

Законченный просто писать метод обертки для преобразования Doctrine_Collections в томами CSV на основе конкретного столбца:

public static function toString(array $options) 
{ 
    $collection = $options['collection']; 
    $columnName = $options['columnName']; 
    $separator = (isset($options['separator'])) ? $options['separator'] : ', '; 

    foreach ($collection->toArray() as $element) { 

     if (isset($element[$columnName])) { 
      $columnValues[] = $element[$columnName]; 
     } 
    } 

    return (isset($columnValues)) ? implode($separator, $columnValues) : null; 
}