foreach в классе: я не могу вернуть все элементы в обр - PullRequest
0 голосов
/ 25 января 2010

Ну, я продолжаю улучшать свои классы генерации форм и застрял в возвращении всех элементов страны в массиве country_data. Только первые два элемента отображаются в раскрывающихся меню.

Вот класс раскрывающегося списка:

//drop down form class
class DropDown
{
  function __construct ($form, $field_label, $field_name, $field_desc, $dropdown_data, $locale){
    $this->form = $form;
    $this->field_label = $field_label;
    $this->field_name = $field_name;
    $this->field_desc = $field_desc;
    $this->dropdown_data = $dropdown_data;
    $this->locale = $locale;
  }

  function getNotRequiredData(){
    global $notReqArry;
    return $notReqArry[$this->locale];
  }

  function getValue(){
    return $_POST[$this->field_name];
  }

  function option(){
    foreach ($this->dropdown_data as $key=>$value){
      return $options = sprintf('%s',$key,$value);
    };
  }
  function dropdown(){
    return $select_start = "field_name\">$this->field_desc".$this->option()."";
  }

  function getLabel(){
    $non_req = $this->getNotRequiredData();
    $req = in_array($this->field_name, $non_req) ? '<sup></sup>' : '<sup>*</sup>';
    return $this->field_label ? $req . $this->field_label : '';
  }

  function __toString(){
    $id = $this->field_name;
    $label = $this->getLabel();
    $field = $this->dropdown();
    return 'field_name.'">'.$label.''.$field.'';
  }
}

И я использую дополнительную функцию для дополнительных опций:

function generateForm ($lang,$country_list){

  switch($lang)
  {
    case 'en-US':
      //create EN web form
      echo $countryField = new DropDown ($form, 'Country', 'form_country', '--Select Country--', $country_list, 'en-US');
    break;
    case 'fr-FR':
      //create FR web form
    break;
    case 'de-DE':
      //create DE web form
    break;
    case 'ja-JP':
      //create JA web form
    break;
    default:
      //create default web form
      print('foooo');
  };
}

И я называю generateForm fun внизу страницы.

$lang='en-US';
echo generateForm ($lang,$country_list);

В предыдущем вопросе один эксперт упомянул, что $ key и $ value в foreach не являются объектами, но я не понимаю, что мне нужно здесь для большей логики. Да, я действительно новичок в PHP и у меня небольшой опыт работы с AS. Мне нужна помощь.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 25 января 2010

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

function options(){
  $options = '';
  foreach ($this->dropdown_data as $key=>$value){
    $options .= sprintf('<option value="%s">%s</option>',$key,$value);
  };
  return $options;
}
2 голосов
/ 25 января 2010

Удивительно, что в вашем раскрывающемся списке есть два элемента, согласно вашему коду, у вас должен быть только один.так как ваша функция

function options(){
foreach ($this->dropdown_data as $key=>$value){
  return $options = sprintf('%s',$key,$value);
};  }

Возвращает только первый параметр, который она получает из массива, и выходит из цикла.Соберите все предметы вместе и верните их в кучу или вызовите экстрактор опций из какого-то внешнего цикла, и он будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...