_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
,并查看有什么问题