В настоящее время я работаю над выпадающим списком множественного выбора. Мне нужно отобразить выбранные значения в форме редактирования.
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>
$artist_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
получается через:
$current_artist_list = $vid->get_artistsID_for_video($_POST['id_video']);
get_artistsID_for_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_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 [] = $row['id_artist_fk'];
// array_push($artists, $artist);
}
return $artist;
}
} catch (Exception $ex) {
$ex->getMessage();
$ex->getFile();
}
}
смотреть на in_array
руководство:
in_array — проверяет, существует ли значение в массиве
Итак, что проверяет ваш in_array($value['id_artist'], $current_artist_list, true)
?
Это проверяет, что в $current_artist_list
существует значение $value['id_artist']
, Например, если $value['id_artist']
является 20, in_array
проверяет значение 20 в вашем массиве.
Но ценность 20 является НЕ в вашем $current_artist_list
массив.
Потому что формат каждого элемента в вашем $current_artist_list
является array('id_artist_fk' => $row['id_artist_fk'])
,
Итак, вы ищете 20, но ценность, которую вы храните ('id_artist_fk' => 20)
,
20
НЕ РАВНЫ array
,
Исправление в get_artistsID_for_video()
:
while ($row = $result->fetch_array()) {
$artists[] = $row['id_artist_fk'];
}
Теперь вы ищете 20
в массиве, где каждый элемент является числом тоже.
Делая ваш поиск даже Быстрее (до сих пор внутри get_artistsID_for_video
):
while ($row = $result->fetch_array()) {
// create array key with value of artist id
$artists[$row['id_artist_fk']] = 1;
}
И заменить in_array
с:
// check for existence of a key, not value.
if (!empty($current_artist_list[$value['id_artist']])) {
$selected = "selected='selected'";
}
Пожалуйста, проверьте, что $ current_artist_list должен быть одним массивом. т.е. $ current_artist_list [0] = 1;
$ current_artist_list [1] = 2;
Который будет соответствовать ваш идентификатор с условием. Сейчас похоже, что ваш $ current_artist_list является значением ассоциативного массива с ключом. Попробуйте нажать только значение, как я упоминал выше, ИЛИ измените код, как показано ниже.
$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']);
}
}