1
// Get Series List
    $this->load->model('Series_model');
    $serieslist = $this->Series_model->gettypelist($userid, 'e');

    $series_item_id = 0;

    $this->db->select('series_id');
    $this->db->where('type_id', 13);
    $this->db->where('series_type', 'e');
    $series_item_query = $this->db->get('series_items');

    if ($series_item_query->num_rows() > 0) {
        $series_item_id = $series_item_query->result();
    }
    //print_r($series_item_id);

    $data['serieslist'] = '<select name="series_id[]" class="type input_select" multiple="multiple">';
    $data['serieslist'] .= '<option value="">None</option>';
    foreach ($serieslist as $list) {
        $data['serieslist'] .= '<option value="' . $list->id . '" ' . ($series_item_id[0]->series_id === $list->id ? 'selected="selected"' : '') . '>' . $list->title . '</option>';
    }
    $data['serieslist'] .= '</select>';

Above is the code I am working with. What I would like to be able to do is to set multiple selected="selected"'s for multiple values of a select dropdown menu. So for example:

<select name="series_id[]" class="type input_select" multiple="multiple">
    <option value="">None</option>
    <option value="4">Event Series: Test 1</option>
    <option value="5">Event Series: Test 2</option>
    <option value="16">Event Series: Test 3</option>
    <option value="17">Event Series: Test 4</option>
    <option value="18">Event Series: Test 5</option>
    <option value="19">Event Series: Test 6</option>
    <option value="20">Event Series: Test 7</option>
    <option value="21">Event Series: Test 8</option>
</select>

I would like option values of 4 16 and 19 to be selected="selected", but in my code above it is only selecting 4 and then stopping. what am I missing? If you need further information please let me know.

Thanks in advance.

EDIT:

Result of print_r:

Array ( [0] => stdClass Object ( [series_id] => 4 ) [1] => stdClass Object ( [series_id] => 16 ) [2] => stdClass Object ( [series_id] => 19 ) )

Updated code:

foreach ($serieslist as $list) {
        $data['serieslist'] .= '<option value="' . $list->id . '" ' . (in_array($list->id, $series_item_id, TRUE) ? 'selected="selected"' : '') . '>' . $list->title . '</option>';
    }

Above updated code does not work.

4
  • 1
    Why don't you use an in_array() call instead of the foreach? Commented May 31, 2012 at 20:26
  • What is the result of print_r($series_item_id);? Commented May 31, 2012 at 20:28
  • Please provide example for in_array() in terms of my code? And the print_r results are Array ( [0] => stdClass Object ( [series_id] => 4 ) [1] => stdClass Object ( [series_id] => 16 ) [2] => stdClass Object ( [series_id] => 19 ) ), please see updated code in question. Commented May 31, 2012 at 20:31
  • Attempted in_array(), still no difference Commented May 31, 2012 at 20:41

1 Answer 1

3

you compare $list->id to first $series_item_id: $series_item_id [0]->series_id

you need to put other foreach in existing one:

foreach ($serieslist as $list) {
    foreach ($series_item_id as $series_item) {
         $data['serieslist'] .= '<option value="' . $list->id . '" ' . ($series_item->series_id === $list->id ? 'selected="selected"' : '') . '>' . $list->title . '</option>';
    }
}

or fetch series_id as array and use in_array():

$series_array = array();

foreach ($series_item_id as $series_item) {
     $series_array[] = $series_item->series_id;
}

foreach ($serieslist as $list) {

         $data['serieslist'] .= '<option value="' . $list->id . '" ' . (in_array($series_array, $list->id) ? 'selected="selected"' : '') . '>' . $list->title . '</option>';

}
Sign up to request clarification or add additional context in comments.

1 Comment

try any of those... $series_item_id is an array of objects and $list->id an integer so AFAIK comparing them directly will fail, especially with strict comparison enabled

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.