HTML — Php in_array () не работает должным образом

В настоящее время я работаю над выпадающим списком множественного выбора. Мне нужно отобразить выбранные значения в форме редактирования.

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();
}
}

0

Решение

смотреть на 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'";
}
1

Другие решения

Пожалуйста, проверьте, что $ 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']);
}
}
1

По вопросам рекламы [email protected]