简体   繁体   中英

How do I access only second array?

I'm doing this:

$sql_glassware = 'SELECT id, name FROM glassware';
$qry_glassware = $con->query($sql_glassware);
$get_glassware = $qry_glassware->fetchAll(PDO::FETCH_ASSOC);
debug($get_glassware);

debug() is a personal function; It returns the result like this:

$get_glassware = array(19) {
    [0]=>array(2) {
        ["id"]=>string(1) "1"
        ["name"]=>string(8) "Cocktail"
    }
    [1]=>array(2) {
        ["id"]=>string(1) "2"
        ["name"]=>string(9) "Margarita"
    }
    [2]=>array(2) {
        ["id"]=>string(1) "3"
        ["name"]=>string(8) "Highball"
    }
    ...
}

I'm guessing the first array level is the rows, and the second level is the columns.
don't know why it return the id as strings thoug...

Then I'm using a class to construct a complete form; I have a public function called addSelect() where the first argument takes an array of values to build the options list: array('name0','name1', 'name2','...') and do a foreach() -loop inside:

public function addSelect($opt=array(),$param=array())
    $name = $this->useEither($param['name'],'dropdown-list');  //  useEither() is a personal function
    foreach ($opt as $val => $name){
        $options .= '<option value="'.$val.'">'.$name.'</option>';
    }
    $select = '<select name="'.$name.'" '.$param['string'].'>'.$options.'</select>';
    $this->formElements[] = $select;  //  store the list for use later
}

How can re-write this litte function so I can pass $get_glassware directly into my function first argument and have it output the options like this:

<option value="1">Cocktail</option>
<option value="2">Margarita</option>
<option value="3">Highball</option>

Try this:

public function addSelect($opt=array(),$param=array())
    $name = $this->useEither($param['name'],'dropdown-list');  //  useEither() is a personal function
    foreach ($opt as $option){
        $options .= '<option value="'.$option['id'].'">'.$option['name'].'</option>';
    }
    $select = '<select name="'.$name.'" '.$param['string'].'>'.$options.'</select>';
    $this->formElements[] = $select;  //  store the list for use later
}

I'm not sure why or what do you want to do there but your foreach in addSelect overwrites the $name variable.

But as far as I understand your problem, that should do the trick for you.

foreach ($opt as $val => $name){
    $options .= '<option value="' . $name['id'] . '">' . $name['name'] . '</option>';
}

For the debug function... usually print_r is easier to read instead of var_dump but for debugging maybe sometimes still necessary.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM