_array()中的Php未按预期工作

_array()中的Php未按预期工作,php,html,foreach,multiple-select,Php,Html,Foreach,Multiple Select,我目前正在处理一个多选下拉列表。我需要在编辑表单上显示选定的值 in_array()未按预期工作,我的逻辑中是否有错误 显示数据库中选定值的代码为: <div class="form-group"> <label class="col-md-3 control-label" for="selectbasic">Update Artist Selection</label> <div class="col-md-6">

我目前正在处理一个多选下拉列表。我需要在编辑表单上显示选定的值

in_array()
未按预期工作,我的逻辑中是否有错误

显示数据库中选定值的代码为:

<div class="form-group">
    <label class="col-md-3 control-label" for="selectbasic">Update Artist Selection</label>
    <div class="col-md-6">
        <select id="artists1" multiple="multiple" name="id_artist_fk[]" class="form-control ">
            <?php
            foreach ($artist_list as $key => $value) {
                if (in_array($value['id_artist'], $current_artist_list, true)) {
                    $selected = "selected='selected'";
                }
                // print_r($value['id_artist']. "==". $current_artist_list);
                echo "<option value=\"{$value['id_artist']}\" {$selected}>{$value['name']} {$value['surname']}</option>";
            }
            ?>
        </select>
    </div>
</div>
$current\u artist\u list
可通过以下方式获取:

public function get_artist_list() {
    $sql = "SELECT * FROM tbl_v_artist WHERE status != 0;";
    $result = $this->database->doSelectQuery($sql);
    $artists = array();
    if ($result->num_rows > 0) {
        while ($row = $result->fetch_array()) {
            $artist = array(
                'id_artist' => $row['id_artist'],
                'name' => $row['name'],
                'surname' => $row['surname'],
                'status' => $row['status']
            );
            array_push($artists, $artist);
        }
    }
    return $artists;
}
$current_artist_list = $vid->get_artistsID_for_video($_POST['id_video']);
get\u artistsID\u for\u video
是:

public function get_artistsID_for_video($video_id) {
    try {
        $sql = "SELECT
                tbl_video_artist.id_artist_fk
                FROM tbl_video_artist
                left join tbl_v_artist
                ON tbl_v_artist.id_artist = tbl_video_artist.id_artists
                WHERE tbl_video_artist.id_video_fk = {$video_id};";
        //echo $sql;
        $result = $this->database->doSelectQuery($sql);
        $artists = array();
        if ($result->num_rows > 0) {
            while ($row = $result->fetch_array()) {
                $artist = array(
                    'id_artist_fk' => $row['id_artist_fk']
                );
                array_push($artists, $artist);
            }
        }
        return $artists;
    } catch (Exception $ex) {
        $ex->getMessage();
        $ex->getFile();
    }
}
请帮我指出正确的方向


我已将get_artistsID_for_视频编辑如下:

public function get_artistsID_for_video($video_id) {
    try {
        $sql = "SELECT
                tbl_video_artist.id_artist_fk
                FROM tbl_video_artist
                left join tbl_v_artist
                ON tbl_v_artist.id_artist = tbl_video_artist.id_artists
                WHERE tbl_video_artist.id_video_fk = {$video_id};";
        //echo $sql;
        $result = $this->database->doSelectQuery($sql);
       // $artists = array();
        if ($result->num_rows > 0) {
            while ($row = $result->fetch_array()) {
                $artist [] = $row['id_artist_fk'];
               // array_push($artists, $artist);
            }
             return $artist;
        }

    } catch (Exception $ex) {
        $ex->getMessage();
        $ex->getFile();
    }
}

请检查$current\u artist\u list必须是单个数组。i、 e$当前艺术家名单[0]=1; $current_Artistor_list[1]=2

这将使您的id与条件匹配。现在看来,您的$current\u artist\u列表是具有with key的关联数组值。尝试按我上面提到的那样只推送值,或者按下面的方式更改代码

$artists = array();
        if ($result->num_rows > 0) {
            while ($row = $result->fetch_array()) {
                $artist = array(
                    'id_artist_fk' => $row['id_artist_fk']
                );
                array_push($artists, $row['id_artist_fk']);
            }
        }

请检查$current\u artist\u list必须是单个数组。i、 e$当前艺术家名单[0]=1; $current_Artistor_list[1]=2

这将使您的id与条件匹配。现在看来,您的$current\u artist\u列表是具有with key的关联数组值。尝试按我上面提到的那样只推送值,或者按下面的方式更改代码

$artists = array();
        if ($result->num_rows > 0) {
            while ($row = $result->fetch_array()) {
                $artist = array(
                    'id_artist_fk' => $row['id_artist_fk']
                );
                array_push($artists, $row['id_artist_fk']);
            }
        }

查看\u数组中的
手册:

in_array-检查数组中是否存在值

那么,在数组($value['id\u artist',$current\u artist\u list,true)中,什么检查您的

它检查
$current\u artist\u列表中是否存在
$value['id\u artist']
的值。例如,如果
$value['id\u artist']
20,则数组中的
检查值20是否在数组中

但值20不是
$current\u artist\u列表中的

因为
$current\u artist\u列表中每个元素的格式都是
数组('id\u artist\u fk'=>$row['id\u artist\u fk'])

所以,您正在搜索20,但您存储的值是
('id\u artist\u fk'=>20)

20
不等于
数组

修复程序位于
get\u artistsID\u for\u video()

现在您在数组中搜索
20
,其中每个元素也是一个数字

使您的搜索速度更快(仍在
为视频获取artistsID\):

并将_数组中的
替换为:

// check for existence of a key, not value.
if (!empty($current_artist_list[$value['id_artist']])) {
    $selected = "selected='selected'";
}

查看\u数组中的
手册:

in_array-检查数组中是否存在值

那么,在数组($value['id\u artist',$current\u artist\u list,true)
中,什么检查您的

它检查
$current\u artist\u列表中是否存在
$value['id\u artist']
的值。例如,如果
$value['id\u artist']
20,则数组中的
检查值20是否在数组中

但值20不是
$current\u artist\u列表中的

因为
$current\u artist\u列表中每个元素的格式都是
数组('id\u artist\u fk'=>$row['id\u artist\u fk'])

所以,您正在搜索20,但您存储的值是
('id\u artist\u fk'=>20)

20
不等于
数组

修复程序位于
get\u artistsID\u for\u video()

现在您在数组中搜索
20
,其中每个元素也是一个数字

使您的搜索速度更快(仍在
为视频获取artistsID\):

并将_数组中的
替换为:

// check for existence of a key, not value.
if (!empty($current_artist_list[$value['id_artist']])) {
    $selected = "selected='selected'";
}

而不是
$artist=array('id\u artist\u fk'=>$row['id\u artist\u fk');阵列推送($艺术家,$艺术家)使用
$artist[]=$row['id\u artist\u fk']在您的上一个函数(如问题所示)中,我执行了@Anantif($result->num_rows>0){while($row=$result->fetch_array()){$artist[]=$row['id_-artist_-fk'];//array_push($artists,$artist);}@Anant,请检查我编辑的问题no@Anant它不是。如果您对
$artist\u list
$current\u artist\u list
进行
var\u dump
检查发生了什么,可能会有所帮助。而不是
$artist=array('id\u artist\u fk'=>$row['id\u artist\u fk');阵列推送($艺术家,$艺术家)使用
$artist[]=$row['id\u artist\u fk']在您的上一个函数(如问题所示)中,我执行了@Anantif($result->num_rows>0){while($row=$result->fetch_array()){$artist[]=$row['id_-artist_-fk'];//array_push($artists,$artist);}@Anant,请检查我编辑的问题no@Anant它不是,如果你对
$artist\u list
$current\u artist\u list
进行
变量转储可能会有所帮助,以检查发生了什么。谢谢你,穆德:但它仍然没有显示任何内容:请检查我的问题:它已更新输出
$value
$current\u artist\u list
并查看有什么问题。谢谢您:但它仍然没有显示任何错误:请检查我的问题:它已更新输出
$value
$current\u artist\u list
,并查看有什么问题