2013-05-30 1 views
0

У меня есть таблица с 10 полями с этими именами: поле1, поле2 и т. Д. Я хочу получить одного регистратора (с красноречивым и -> первым()). И когда у меня есть объект (скажем, $ user), могу ли я сделать что-то подобное в контроллере?

for ($i=1; $i<=10; $i++) { 
    $field_name = 'field'.$i; 
    if ($user->$field_name == 1) { 
     // do something 
    } 
} 

Или я должен назвать их вручную?

if ($user->field1 == 1) { 
     // do something 
    } 
    if ($user->field2 == 1) { 
     // do something 
    } 
    .... 
+1

Вы пробовали это? Потому что [возможно] (http://stackoverflow.com/questions/804850/get-php-class-property-by-string). – vstm

ответ

1

Как @vstm сказал, что это возможно, здесь две рабочие примеры того, что вы можете сделать:

foreach($data as $key => $row) { 
    $r[$row->$id] = ($abbreviation ? $row->$abbreviation.' - ' : ''). ($method ? $row->$name() : $row->$name); 
} 

и

if(isset($line['childs'])) 
{ 
    $childs = $model->$line['childs']()->get(['id'])->toArray(); 

    if(count($childs)) 
    { 
     foreach($childs as $value) 
     { 
      $selected[] = $value['id']; 
     } 
    } 
    else 
    { 
     $selected = null;      
    } 


    $line['selected'] = $selected; 
}