每个用于每个的php数组

时间:2012-05-29 14:36:55

标签: php arrays

我正在尝试获取包含$staff值的选择列表 我正在努力的一点是选择已经从$entry->enrolments注册的员工。

如果$staff id中存在$entry->enrolments,请在选择列表中选择

$entry =来自mysql的记录

$staff =数组中的人员列表。

$entry->enrolments =注册员工的逗号分隔值

<select name="tutor[]" id="tutor" multiple="multiple" size="5" class="required" title="Select Staff">

<?php
    $entry = get_record("staff_development", "id", $id);
    $staff = get_records("user", "deleted", "0", "lastname ASC", "id,firstname,lastname,idnumber");
    $sdenrolments=array($entry->enrolments);
    $people = explode(",", $entry->enrolments);


    foreach($staff as $tutor){
    foreach($people as $person){

    if($tutor->id>1)echo '<option value="'.$tutor->id.'"';
    if ($person==$tutor->id) {echo 'selected="selected"';}
    echo '>'.$tutor->lastname.' '.$tutor->firstname.'</option>';
    }
    }
?>

</select>

非常感谢任何帮助/指导。 提前致谢

2 个答案:

答案 0 :(得分:3)

in_array是判断值是否在数组中的最简单方法:)用这个替换你的循环:

foreach($staff as $tutor){
    echo '<option value="'.$tutor->id.'"';
    if(in_array($tutor->id, $people))
        echo 'selected="selected"';
    echo '>'.$tutor->lastname.' '.$tutor->firstname.'</option>';
}

您可能还想将变量从people重命名为enrolled_staff或更清楚一些。

答案 1 :(得分:1)

您的if区块令人困惑。您在打开选项标签时正在检查$tutor->id > 1,但在关闭它时不会。 PaulP.R.O mentions in_array你应该替换你的foreach循环。这是您清理的if块,并设置内联选择检查。

if($tutor->id > 1) {
    echo '<option value="'.$tutor->id.'" ' . (($person==$tutor->id) ? ' selected="selected"': '') . '>';
    echo $tutor->lastname.' '.$tutor->firstname;
    echo '</option>';
}