PHP 数组为每个 in 为每个


php array for each in for each

我正在尝试获取一个包含$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>

任何帮助/指导将不胜感激。提前致谢

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 或更清晰的名称。

你的if块令人困惑。 打开选项标记时检查$tutor->id > 1,但在关闭选项标记时不会检查。 PaulP.R.O提到了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>';
}